Quassel IRC  Pre-Release
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
transfer.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005-2015 by the Quassel Project *
3  * devel@quassel-irc.org *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) version 3. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19  ***************************************************************************/
20 
21 #ifndef TRANSFER_H
22 #define TRANSFER_H
23 
24 #include <QHostAddress>
25 #include <QUuid>
26 
27 #include "peer.h"
28 #include "syncableobject.h"
29 
30 class Transfer : public SyncableObject
31 {
32  Q_OBJECT
34 
35  Q_PROPERTY(QUuid uuid READ uuid);
36  Q_PROPERTY(State state READ state WRITE setState NOTIFY stateChanged);
37  Q_PROPERTY(Direction direction READ direction WRITE setDirection NOTIFY directionChanged);
38  Q_PROPERTY(QHostAddress address READ address WRITE setAddress NOTIFY addressChanged);
39  Q_PROPERTY(quint16 port READ port WRITE setPort NOTIFY portChanged);
40  Q_PROPERTY(QString fileName READ fileName WRITE setFileName NOTIFY fileNameChanged);
41  Q_PROPERTY(quint64 fileSize READ fileSize WRITE setFileSize NOTIFY fileSizeChanged);
42  Q_PROPERTY(QString nick READ nick WRITE setNick NOTIFY nickChanged);
43 
44 public:
45  enum State {
46  New,
54  };
56 
57  enum Direction {
58  Send,
59  Receive
60  };
61  Q_ENUMS(Direction)
62 
63  Transfer(const QUuid &uuid, QObject *parent = 0); // for creating a syncable object client-side
64  Transfer(Direction direction, const QString &nick, const QString &fileName, const QHostAddress &address, quint16 port, quint64 size = 0, QObject *parent = 0);
65  inline virtual const QMetaObject *syncMetaObject() const { return &staticMetaObject; }
66 
67  QUuid uuid() const;
68  State state() const;
69  Direction direction() const;
70  QString fileName() const;
71  QHostAddress address() const;
72  quint16 port() const;
73  quint64 fileSize() const;
74  QString nick() const;
75 
76 public slots:
77  // called on the client side
78  virtual void accept(const QString &savePath) const { Q_UNUSED(savePath); }
79  virtual void reject() const {}
80 
81  // called on the core side through sync calls
82  virtual void requestAccepted(PeerPtr peer) { Q_UNUSED(peer); }
83  virtual void requestRejected(PeerPtr peer) { Q_UNUSED(peer); }
84 
85 signals:
86  void stateChanged(State state);
87  void directionChanged(Direction direction);
88  void addressChanged(const QHostAddress &address);
89  void portChanged(quint16 port);
90  void fileNameChanged(const QString &fileName);
91  void fileSizeChanged(quint64 fileSize);
92  void nickChanged(const QString &nick);
93 
94  void error(const QString &errorString);
95 
96  void accepted(PeerPtr peer = 0) const;
97  void rejected(PeerPtr peer = 0) const;
98 
99 protected slots:
100  void setState(State state);
101  void setError(const QString &errorString);
102 
103  // called on the client side through sync calls
104  virtual void dataReceived(PeerPtr, const QByteArray &data) { Q_UNUSED(data); }
105 
106  virtual void cleanUp() = 0;
107 
108 private:
109  void init();
110 
111  void setDirection(Direction direction);
112  void setAddress(const QHostAddress &address);
113  void setPort(quint16 port);
114  void setFileName(const QString &fileName);
115  void setFileSize(quint64 fileSize);
116  void setNick(const QString &nick);
117 
118 
120  Direction _direction;
121  QString _fileName;
122  QHostAddress _address;
123  quint16 _port;
124  quint64 _fileSize;
125  QString _nick;
126  QUuid _uuid;
127 };
128 
129 #endif