1/***************************************************************************
2 * Copyright (C) 2005-2014 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
30class Transfer : public SyncableObject
31{
32 Q_OBJECT
33 SYNCABLE_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
44public:
45 enum State {
46 New,
47 Pending,
48 Connecting,
49 Transferring,
50 Paused,
51 Completed,
52 Failed,
53 Rejected
54 };
55 Q_ENUMS(State)
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
76public 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
85signals:
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
99protected 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
108private:
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
119 State _state;
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
130