ssl: Use QSslSocket directly to avoid redundant qobject_casts
[quassel.git] / src / common / transfer.h
index ce24b8b..2bf8526 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 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"
-#include "types.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,
@@ -54,18 +56,25 @@ public:
     };
     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;
@@ -73,9 +82,11 @@ 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 accept(const QStringsavePath) const { Q_UNUSED(savePath); }
     virtual void reject() const {}
 
     // called on the core side through sync calls
@@ -83,25 +94,26 @@ public slots:
     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 QHostAddressaddress);
     void portChanged(quint16 port);
-    void fileNameChanged(const QString &fileName);
+    void fileNameChanged(const QStringfileName);
     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 QStringerrorString);
 
-    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 QStringerrorString);
 
     // called on the client side through sync calls
-    virtual void dataReceived(PeerPtr, const QByteArray &data) { Q_UNUSED(data); }
+    virtual void dataReceived(PeerPtr, const QByteArraydata) { Q_UNUSED(data); }
 
     virtual void cleanUp() = 0;
 
@@ -109,14 +121,13 @@ private:
     void init();
 
     void setDirection(Direction direction);
-    void setAddress(const QHostAddress &address);
+    void setAddress(const QHostAddressaddress);
     void setPort(quint16 port);
-    void setFileName(const QString &fileName);
+    void setFileName(const QStringfileName);
     void setFileSize(quint64 fileSize);
-    void setNick(const QString &nick);
+    void setNick(const QStringnick);
 
-
-    State _state;
+    Status _status;
     Direction _direction;
     QString _fileName;
     QHostAddress _address;
@@ -126,4 +137,10 @@ private:
     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);