/***************************************************************************
- * Copyright (C) 2005-2015 by the Quassel Project *
+ * Copyright (C) 2005-2020 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef TRANSFER_H
-#define TRANSFER_H
+#pragma once
+
+#include "common-export.h"
#include <QHostAddress>
#include <QUuid>
#include "peer.h"
#include "syncableobject.h"
-class Transfer : public SyncableObject
+class COMMON_EXPORT 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,
};
Q_ENUMS(State)
- enum Direction {
+ enum class Direction
+ {
Send,
Receive
};
Q_ENUMS(Direction)
- 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 virtual const QMetaObject *syncMetaObject() const { return &staticMetaObject; }
+ Transfer(const QUuid& uuid, QObject* parent = nullptr); // for creating a syncable object client-side
+ Transfer(Direction direction,
+ QString nick,
+ QString fileName,
+ const QHostAddress& address,
+ quint16 port,
+ quint64 size = 0,
+ QObject* parent = nullptr);
QUuid uuid() const;
- State state() const;
+ Status status() const;
+ QString prettyStatus() const;
Direction direction() const;
QString fileName() const;
QHostAddress address() const;
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 accept(const QString& savePath) const { Q_UNUSED(savePath); }
virtual void reject() const {}
// called on the core side through sync calls
virtual void requestRejected(PeerPtr peer) { Q_UNUSED(peer); }
signals:
- void stateChanged(State state);
- void directionChanged(Direction direction);
- void addressChanged(const QHostAddress &address);
+ 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 fileNameChanged(const QString& fileName);
void fileSizeChanged(quint64 fileSize);
- void nickChanged(const QString &nick);
+ void transferredChanged(quint64 transferred);
+ void nickChanged(const QString& nick);
- void error(const QString &errorString);
+ void error(const QString& errorString);
- void accepted(PeerPtr peer = 0) const;
- void rejected(PeerPtr peer = 0) const;
+ void accepted(PeerPtr peer = nullptr) const;
+ void rejected(PeerPtr peer = nullptr) const;
protected slots:
- void setState(State state);
- void setError(const QString &errorString);
+ 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 dataReceived(PeerPtr, const QByteArray& data) { Q_UNUSED(data); }
virtual void cleanUp() = 0;
void init();
void setDirection(Direction direction);
- void setAddress(const QHostAddress &address);
+ void setAddress(const QHostAddress& address);
void setPort(quint16 port);
- void setFileName(const QString &fileName);
+ void setFileName(const QString& fileName);
void setFileSize(quint64 fileSize);
- void setNick(const QString &nick);
+ void setNick(const QString& nick);
-
- State _state;
+ Status _status;
Direction _direction;
QString _fileName;
QHostAddress _address;
QUuid _uuid;
};
-#endif
+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);