summaryrefslogtreecommitdiffstats
path: root/pica-client/dialogs/filetransferdialog.h
blob: 7b4e8dbe4786c1e581ebb777ef64b0f1e8ae9093 (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
109
/*
	(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, either version 3 of the License, or
	(at your option) any later version.

	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