summaryrefslogtreecommitdiffstats
path: root/dvdimagejobgui.cpp
blob: 08cb444703ddab2b5d59fc8992e91585d34142cd (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
#include "dvdimagejobgui.h"
#include "dvdimagejob.h"
#include "dvddrive.h"
#include <dvdcss/dvdcss.h>
#include <QProgressBar>
#include <QLabel>
#include <QVBoxLayout>

DVDImageJobGui::DVDImageJobGui(DVDImageJob *job) :
		m_first(true)
{
	m_progressBar = new QProgressBar;
	m_progressLabel = new QLabel;
	QVBoxLayout *layout = new QVBoxLayout;
	layout->addWidget(new QLabel(tr("<b>Copying DVD ISO</b> of <i>%1</i>").arg(job->video()->title())));
	layout->addWidget(m_progressBar);
	layout->addWidget(m_progressLabel);
	setLayout(layout);
	connect(job, SIGNAL(extractProgress(int,int)), this, SLOT(extractProgress(int,int)));
}
void DVDImageJobGui::extractProgress(int current, int maximum)
{
	if (m_first) {
		m_startTime.start();
		m_first = false;
	} else {
		long long currentBytes = (long long)current * DVDCSS_BLOCK_SIZE;
		long long maximumBytes = (long long)maximum * DVDCSS_BLOCK_SIZE;
		double bytesPerMillisecond = (double)currentBytes / (double)m_startTime.elapsed();
		long long millisecondsRemaining = (long long)((maximumBytes - currentBytes) / bytesPerMillisecond);
		m_progressLabel->setText(tr("%1 of %2 mb (%3 mb/s, %4 remaining)")
							.arg(QString::number((double)currentBytes / 1024.0 / 1024.0, 'f', 2))
							.arg(QString::number((double)maximumBytes / 1024.0 / 1024.0, 'f', 2))
							.arg(QString::number(bytesPerMillisecond * (1000.0 / 1024.0 / 1024.0), 'f', 2))
							.arg(QTime().addMSecs(millisecondsRemaining).toString()));
	}
	m_progressBar->setMaximum(maximum);
	m_progressBar->setValue(current);
}