summaryrefslogtreecommitdiffstats
path: root/pica-client/dialogs/filetransferdialog.h
blob: 45bf67b93935623abef664250268b49ef2339f3a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
	(c) Copyright  2012 - 2018 Anton Sviridenko
	https://picapica.im

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, version 3.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef FILETRANSFERDIALOG_H
#define FILETRANSFERDIALOG_H

#include <QDialog>
#include <QProgressBar>
#include <QLabel>
#include <QPushButton>
#include <QTimer>
#include <QByteArray>

class FileTransferDialog : public QDialog
{
	Q_OBJECT
public:
	enum TransferDirection
	{
		SENDING,
		RECEIVING
	};

	enum TransferStatus
	{
		WAITINGFORACCEPT,
		DENIED,
		SENDINGFILE,
		RECEIVINGFILE,
		PAUSED,
		CANCELLED,
		PEERDISCONNECTED,
		IOERROR,
		FINISHED
	};

	explicit FileTransferDialog(QByteArray peer_id, QString filename, quint64 size,
	                            TransferDirection drct, QWidget *parent = 0);

	TransferDirection getTransferDirection()
	{
		return dir_;
	};


private:
	QLabel *lbFilename;
	QLabel *lbPeer;
	QLabel *lbProgressStatus;
	QLabel *lbTransferSpeed;
	QLabel *lbRemainingTime;
	QLabel *lbTransferStatus;
	QProgressBar *pgbar;
	QPushButton *leftbutton;
	QPushButton *rightbutton;

	QByteArray peer_id_;
	QString peer_name_;
	TransferDirection dir_;
	QString filename_;
	quint64 filesize_;

	double percents;
	quint64 progress_;
	quint64 prevprogress_;

	static QString bytestoHumanBase2(quint64 bytes);
	static QString bytestoHumanBase10(quint64 bytes);
	static QString timeLeft(quint64 seconds);

	QTimer *timer;
signals:
	void pausedFile(QByteArray peer_id, FileTransferDialog *sender);
	void resumedFile(QByteArray peer_id, FileTransferDialog *sender);
	void cancelledFile(QByteArray peer_id, FileTransferDialog *sender);
	void acceptedFile(QByteArray peer_id);
	void deniedFile(QByteArray peer_id);

public slots:
	void update(quint64 progress);
	void setTransferStatus(enum TransferStatus st);
	void pausedByPeer();
	void resumedByPeer();
	void cancelledByPeer();
	void ioError();
	void peerDisconnected();

private slots:
	void timeout();
	void leftbuttonclick();
	void rightbuttonclick();

};

#endif // FILETRANSFERDIALOG_H