summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AnyRip.pro6
-rw-r--r--dvdimagejob.cpp7
-rw-r--r--dvdimagejob.h2
-rw-r--r--encodemp4job.cpp19
-rw-r--r--encodemp4job.h3
-rw-r--r--encodemp4jobgui.cpp14
-rw-r--r--job.cpp17
-rw-r--r--job.h5
-rw-r--r--jobqueue.cpp13
-rw-r--r--jobqueue.h1
-rw-r--r--mainwindow.cpp1
-rw-r--r--statuslabel.cpp23
-rw-r--r--statuslabel.h16
-rw-r--r--titleloadjob.cpp3
-rw-r--r--titleloadjob.h2
-rw-r--r--uploadjob.cpp3
-rw-r--r--uploadjob.h2
-rw-r--r--video.cpp59
-rw-r--r--video.h8
-rw-r--r--videogui.cpp63
-rw-r--r--videogui.h14
-rw-r--r--videoqueue.cpp1
22 files changed, 183 insertions, 99 deletions
diff --git a/AnyRip.pro b/AnyRip.pro
index 4ecbd1c..5b5215f 100644
--- a/AnyRip.pro
+++ b/AnyRip.pro
@@ -14,7 +14,8 @@ SOURCES += main.cpp \
encodemp4jobgui.cpp \
newdvdgui.cpp \
newimagegui.cpp \
- titleloader.cpp
+ titleloader.cpp \
+ statuslabel.cpp
HEADERS += dvdimagejob.h \
dvdimagejobgui.h \
job.h \
@@ -30,7 +31,8 @@ HEADERS += dvdimagejob.h \
encodemp4jobgui.h \
newdvdgui.h \
newimagegui.h \
- titleloader.h
+ titleloader.h \
+ statuslabel.h
LIBS += -ldvdcss \
-ldvdread
QT += dbus
diff --git a/dvdimagejob.cpp b/dvdimagejob.cpp
index ebc818a..12c0ce0 100644
--- a/dvdimagejob.cpp
+++ b/dvdimagejob.cpp
@@ -20,7 +20,7 @@ DVDImageJob::DVDImageJob(Video *video)
DVDImageJob::~DVDImageJob()
{
disconnect(this, 0, 0, 0);
- terminate();
+ kill();
}
int DVDImageJob::cmpvob(const void *p1, const void *p2)
@@ -37,6 +37,9 @@ int DVDImageJob::cmpvob(const void *p1, const void *p2)
bool DVDImageJob::executeJob()
{
+ m_locker.lockForWrite();
+ m_terminate = false;
+ m_locker.unlock();
return saveImageToPath(video()->imagePath());
}
@@ -245,7 +248,7 @@ QWidget* DVDImageJob::gui()
return new DVDImageJobGui(this);
}
-void DVDImageJob::terminate()
+void DVDImageJob::kill()
{
m_locker.lockForWrite();
m_terminate = true;
diff --git a/dvdimagejob.h b/dvdimagejob.h
index 53050db..0d29b56 100644
--- a/dvdimagejob.h
+++ b/dvdimagejob.h
@@ -15,7 +15,7 @@ public:
bool saveImageToPath(const QString &path);
Video::Jobs jobType() const;
public slots:
- void terminate();
+ void kill();
private:
static int cmpvob(const void *p1, const void *p2);
typedef struct vobfile {
diff --git a/encodemp4job.cpp b/encodemp4job.cpp
index 49c7042..217c071 100644
--- a/encodemp4job.cpp
+++ b/encodemp4job.cpp
@@ -15,7 +15,7 @@ EncodeMP4Job::EncodeMP4Job(Video *video) :
EncodeMP4Job::~EncodeMP4Job()
{
disconnect(this, 0, 0, 0);
- terminate();
+ kill();
}
Video::Jobs EncodeMP4Job::jobType() const
{
@@ -24,7 +24,7 @@ Video::Jobs EncodeMP4Job::jobType() const
bool EncodeMP4Job::executeJob()
{
m_process = new QProcess(this);
- connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(terminate()));
+ connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(error()));
connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(finished(int,QProcess::ExitStatus)));
connect(m_process, SIGNAL(readyRead()), this, SLOT(readyRead()));
QStringList arguments;
@@ -73,27 +73,34 @@ void EncodeMP4Job::readyRead()
}
}
}
-void EncodeMP4Job::terminate()
+void EncodeMP4Job::kill()
{
if (m_process) {
disconnect(m_process, 0, 0, 0);
- delete m_process;
+ m_process->terminate();
+ m_process->deleteLater();
m_process = 0;
QFile::remove(m_encodePath);
}
- emit completed(false);
}
void EncodeMP4Job::finished(int exitCode, QProcess::ExitStatus exitStatus)
{
+ if (!m_process) return;
if (exitCode == 0 && exitStatus == QProcess::NormalExit) {
disconnect(m_process, 0, 0, 0);
- delete m_process;
+ m_process->terminate();
+ m_process->deleteLater();
m_process = 0;
emit completed(true);
}
else
terminate();
}
+void EncodeMP4Job::error()
+{
+ kill();
+ emit completed(false);
+}
QWidget* EncodeMP4Job::gui()
{
return new EncodeMP4JobGui(this);
diff --git a/encodemp4job.h b/encodemp4job.h
index 97d3e50..66e2d81 100644
--- a/encodemp4job.h
+++ b/encodemp4job.h
@@ -23,8 +23,9 @@ private:
private slots:
void finished(int exitCode, QProcess::ExitStatus exitStats);
void readyRead();
+ void error();
public slots:
- void terminate();
+ void kill();
signals:
void encodeProgress(int currentTask, int totalTasks, float percent, float currentFps, float avgFps, QTime timeRemaining);
};
diff --git a/encodemp4jobgui.cpp b/encodemp4jobgui.cpp
index a9b1f14..680bbba 100644
--- a/encodemp4jobgui.cpp
+++ b/encodemp4jobgui.cpp
@@ -1,16 +1,23 @@
#include "encodemp4jobgui.h"
#include "encodemp4job.h"
#include <QVBoxLayout>
+#include <QHBoxLayout>
#include <QLabel>
#include <QProgressBar>
+#include <QPushButton>
+#include <QStyle>
EncodeMP4JobGui::EncodeMP4JobGui(EncodeMP4Job *job)
{
m_progressBar = new QProgressBar;
- m_progressBar->setMaximum(10000);
m_progressLabel = new QLabel;
+ QPushButton *cancel = new QPushButton(style()->standardIcon(QStyle::SP_DialogCancelButton), QString());
+ connect(cancel, SIGNAL(clicked()), job, SLOT(terminate()));
QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(m_progressBar);
+ QHBoxLayout *progressCancel = new QHBoxLayout;
+ progressCancel->addWidget(m_progressBar);
+ progressCancel->addWidget(cancel);
+ layout->addLayout(progressCancel);
layout->addWidget(m_progressLabel);
setLayout(layout);
setTitle(tr("Encoding MP4 of %1").arg(job->video()->title()));
@@ -19,7 +26,8 @@ EncodeMP4JobGui::EncodeMP4JobGui(EncodeMP4Job *job)
}
void EncodeMP4JobGui::encodeProgress(int currentTask, int totalTasks, float percent, float currentFps, float avgFps, QTime timeRemaining)
{
- m_progressBar->setValue((int)(percent * 100));
+ m_progressBar->setValue((int)(percent * 100) + (currentTask - 1) * 10000);
+ m_progressBar->setMaximum(10000 * totalTasks);
if (!timeRemaining.isNull() && avgFps != -1 && currentFps != -1)
m_progressLabel->setText(tr("task %1 of %2, %4 fps (avg %5 fps), %3 remaining")
.arg(QString::number(currentTask))
diff --git a/job.cpp b/job.cpp
index bbc55b4..cba2507 100644
--- a/job.cpp
+++ b/job.cpp
@@ -5,7 +5,8 @@
Job::Job(Video *parent, bool threaded)
: QObject(parent),
m_gui(0),
- m_video(parent)
+ m_video(parent),
+ m_terminated(false)
{
if (threaded) {
m_watcher = new QFutureWatcher<bool>;
@@ -20,6 +21,7 @@ Video* Job::video() const
}
void Job::runJob()
{
+ m_terminated = false;
if (m_watcher)
m_watcher->setFuture(QtConcurrent::run(this, &Job::executeJob));
else
@@ -27,7 +29,8 @@ void Job::runJob()
}
void Job::jobFinished()
{
- emit completed(m_watcher->future().result());
+ if (!m_terminated)
+ emit completed(m_watcher->future().result());
}
QWidget* Job::widget()
{
@@ -39,3 +42,13 @@ QFutureWatcher<bool>* Job::watcher() const
{
return m_watcher;
}
+void Job::terminate()
+{
+ m_terminated = true;
+ kill();
+ emit completed(false);
+}
+bool Job::terminated() const
+{
+ return m_terminated;
+}
diff --git a/job.h b/job.h
index 53843e5..721d63b 100644
--- a/job.h
+++ b/job.h
@@ -14,19 +14,22 @@ public:
virtual Video::Jobs jobType() const = 0;
QWidget* widget();
Video* video() const;
+ bool terminated() const;
protected:
Job(Video *parent, bool threaded);
virtual bool executeJob() = 0;
virtual QWidget* gui() = 0;
+ virtual void kill() = 0;
QFutureWatcher<bool>* watcher() const;
private:
QFutureWatcher<bool> *m_watcher;
QWidget *m_gui;
Video *m_video;
+ bool m_terminated;
private slots:
void jobFinished();
public slots:
- virtual void terminate() = 0;
+ void terminate();
signals:
void completed(bool result);
};
diff --git a/jobqueue.cpp b/jobqueue.cpp
index be747d2..10bfa4e 100644
--- a/jobqueue.cpp
+++ b/jobqueue.cpp
@@ -5,7 +5,8 @@
JobQueue::JobQueue(QObject *parent) :
QObject(parent),
- m_jobIsRunning(false)
+ m_jobIsRunning(false),
+ m_currentJob(0)
{
}
void JobQueue::addJob(Job *job)
@@ -20,6 +21,7 @@ void JobQueue::runNextJob()
return;
m_jobIsRunning = true;
Job *job = m_queue.dequeue();
+ m_currentJob = job;
qDebug() << "running job" << job->jobType() << "for video" << qobject_cast<Video*>(job->parent())->title();
connect(job, SIGNAL(completed(bool)), this, SLOT(jobCompleted()));
emit runningJob(job);
@@ -27,6 +29,11 @@ void JobQueue::runNextJob()
}
void JobQueue::jobCompleted()
{
- m_jobIsRunning = false;
- runNextJob();
+ Job *job = qobject_cast<Job*>(sender());
+ if (job == m_currentJob) {
+ m_jobIsRunning = false;
+ m_currentJob = 0;
+ runNextJob();
+ } else
+ m_queue.removeAll(job);
}
diff --git a/jobqueue.h b/jobqueue.h
index 8547bf0..bce3ff7 100644
--- a/jobqueue.h
+++ b/jobqueue.h
@@ -16,6 +16,7 @@ private:
QQueue<Job*> m_queue;
bool m_jobIsRunning;
void runNextJob();
+ Job *m_currentJob;
private slots:
void jobCompleted();
signals:
diff --git a/mainwindow.cpp b/mainwindow.cpp
index 72dad38..0c2040b 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -78,6 +78,5 @@ void MainWindow::runningJob(Job *job)
}
void MainWindow::completedJob(bool success)
{
- //TODO: do something with [lack of] success
delete qobject_cast<Job*>(sender())->widget();
}
diff --git a/statuslabel.cpp b/statuslabel.cpp
new file mode 100644
index 0000000..8312caa
--- /dev/null
+++ b/statuslabel.cpp
@@ -0,0 +1,23 @@
+#include "statuslabel.h"
+#include <QStyle>
+#include <QLabel>
+#include <QHBoxLayout>
+
+StatusLabel::StatusLabel(const QString &text, QWidget *parent) :
+ QWidget(parent)
+{
+ QHBoxLayout *layout = new QHBoxLayout;
+ m_pixmap = new QLabel;
+ setCompleted(false);
+ layout->addWidget(m_pixmap);
+ layout->addWidget(new QLabel(text));
+ setLayout(layout);
+ setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
+}
+void StatusLabel::setCompleted(bool complete)
+{
+ if (complete)
+ m_pixmap->setPixmap(style()->standardIcon(QStyle::SP_DialogApplyButton).pixmap(QSize(16, 16)));
+ else
+ m_pixmap->setPixmap(style()->standardIcon(QStyle::SP_DialogCancelButton).pixmap(QSize(16, 16)));
+}
diff --git a/statuslabel.h b/statuslabel.h
new file mode 100644
index 0000000..8fa8e07
--- /dev/null
+++ b/statuslabel.h
@@ -0,0 +1,16 @@
+#ifndef STATUSLABEL_H
+#define STATUSLABEL_H
+
+#include <QWidget>
+class QLabel;
+
+class StatusLabel : public QWidget
+{
+public:
+ StatusLabel(const QString &text, QWidget *parent = 0);
+ void setCompleted(bool complete);
+private:
+ QLabel *m_pixmap;
+};
+
+#endif // STATUSLABEL_H
diff --git a/titleloadjob.cpp b/titleloadjob.cpp
index b59470a..0bb960b 100644
--- a/titleloadjob.cpp
+++ b/titleloadjob.cpp
@@ -14,6 +14,7 @@ bool TitleLoadJob::executeJob()
{
//TODO: title load the whole thing
sleep(5);
+ emit completed(true);
return true;
}
QWidget* TitleLoadJob::gui()
@@ -21,7 +22,7 @@ QWidget* TitleLoadJob::gui()
//TODO: make a gui
return new QLabel("Bet your ass this is title loading.");
}
-void TitleLoadJob::terminate()
+void TitleLoadJob::kill()
{
//TODO: implement terminating
}
diff --git a/titleloadjob.h b/titleloadjob.h
index a2119da..feb9c64 100644
--- a/titleloadjob.h
+++ b/titleloadjob.h
@@ -14,7 +14,7 @@ protected:
bool executeJob();
QWidget* gui();
public slots:
- void terminate();
+ void kill();
};
#endif // TITLELOADJOB_H
diff --git a/uploadjob.cpp b/uploadjob.cpp
index 786ce52..70f3beb 100644
--- a/uploadjob.cpp
+++ b/uploadjob.cpp
@@ -14,6 +14,7 @@ bool UploadJob::executeJob()
{
//TODO: upload the mp4!
sleep(5);
+ emit completed(true);
return true;
}
QWidget* UploadJob::gui()
@@ -21,7 +22,7 @@ QWidget* UploadJob::gui()
//TODO: make a gui
return new QLabel("Endoplasmic sludge in your upload house");
}
-void UploadJob::terminate()
+void UploadJob::kill()
{
//TODO: implement terminating
}
diff --git a/uploadjob.h b/uploadjob.h
index 0bf2989..bac2b26 100644
--- a/uploadjob.h
+++ b/uploadjob.h
@@ -14,7 +14,7 @@ protected:
bool executeJob();
QWidget* gui();
public slots:
- void terminate();
+ void kill();
};
#endif // UPLOADJOB_H
diff --git a/video.cpp b/video.cpp
index 6e94f5b..58e72e5 100644
--- a/video.cpp
+++ b/video.cpp
@@ -14,7 +14,6 @@
Video::Video(QString title, QObject *parent) :
QObject(parent),
m_jobsCompleted(QBitArray(6)),
- m_jobsInProgress(QBitArray(6)),
m_dvdTitle(1)
{
title.replace(QChar('/'), QChar('-'));
@@ -54,49 +53,49 @@ void Video::saveState()
void Video::completedJob(bool success)
{
Job *job = qobject_cast<Job*>(sender());
- qDebug() << "Job code" << job->jobType() << "completed" << success;
+ qDebug() << "Job code" << job->jobType() << "completed" << success << "terminated: " << job->terminated();
m_jobsCompleted.setBit(job->jobType(), success);
saveState();
- m_jobsInProgress.setBit(job->jobType(), false);
+ m_jobsInProgress.remove(job->jobType(), job);
emit jobCompleted(job->jobType(), success);
job->deleteLater();
}
DVDImageJob* Video::dvdImageJob()
{
- if (!m_jobsInProgress.at(Video::DVDImage) && !m_jobsCompleted.at(Video::DVDImage) && DVDDrive::instance()->dvdInserted()) {
+ if (!m_jobsInProgress.contains(DVDImage) && !m_jobsCompleted.at(DVDImage) && DVDDrive::instance()->dvdInserted()) {
DVDImageJob *job = new DVDImageJob(this);
connect(job, SIGNAL(completed(bool)), this, SLOT(completedJob(bool)));
- m_jobsInProgress.setBit(Video::DVDImage, true);
+ m_jobsInProgress.insert(DVDImage, job);
return job;
}
return 0;
}
EncodeMP4Job* Video::encodeMP4Job()
{
- if (!m_jobsInProgress.at(Video::EncodeMP4) && !m_jobsCompleted.at(Video::EncodeMP4) && m_jobsCompleted.at(Video::DVDImage)) {
+ if (!m_jobsInProgress.contains(EncodeMP4) && !m_jobsCompleted.at(EncodeMP4) && m_jobsCompleted.at(DVDImage)) {
EncodeMP4Job *job = new EncodeMP4Job(this);
connect(job, SIGNAL(completed(bool)), this, SLOT(completedJob(bool)));
- m_jobsInProgress.setBit(Video::EncodeMP4, true);
+ m_jobsInProgress.insert(EncodeMP4, job);
return job;
}
return 0;
}
UploadJob* Video::uploadJob()
{
- if (!m_jobsInProgress.at(Video::Upload) && !m_jobsCompleted.at(Video::Upload) && m_jobsCompleted.at(Video::EncodeMP4)) {
+ if (!m_jobsInProgress.contains(Upload) && !m_jobsCompleted.at(Upload) && m_jobsCompleted.at(EncodeMP4)) {
UploadJob *job = new UploadJob(this);
connect(job, SIGNAL(completed(bool)), this, SLOT(completedJob(bool)));
- m_jobsInProgress.setBit(Video::Upload, true);
+ m_jobsInProgress.insert(Upload, job);
return job;
}
return 0;
}
TitleLoadJob* Video::titleLoadJob()
{
- if (!m_jobsInProgress.at(Video::TitleLoad) && !m_jobsCompleted.at(Video::TitleLoad) && m_jobsCompleted.at(Video::Upload) && m_jobsCompleted.at(Video::Subtitle) && m_jobsCompleted.at(Video::Poster)) {
+ if (!m_jobsInProgress.contains(TitleLoad) && !m_jobsCompleted.at(TitleLoad) && m_jobsCompleted.at(Upload) && m_jobsCompleted.at(Subtitle) && m_jobsCompleted.at(Poster)) {
TitleLoadJob *job = new TitleLoadJob(this);
connect(job, SIGNAL(completed(bool)), this, SLOT(completedJob(bool)));
- m_jobsInProgress.setBit(Video::TitleLoad, true);
+ m_jobsInProgress.insert(TitleLoad, job);
return job;
}
return 0;
@@ -117,33 +116,27 @@ QList<Job*> Video::availableJobs()
}
void Video::setSubtitle(const QIODevice &input)
{
- m_jobsInProgress.setBit(Video::Subtitle, true);
//TODO: save input to subtitle file
- m_jobsCompleted.setBit(Video::Subtitle, true);
+ m_jobsCompleted.setBit(Subtitle, true);
saveState();
- m_jobsInProgress.setBit(Video::Subtitle, false);
- emit jobCompleted(Video::Subtitle, true);
+ emit jobCompleted(Subtitle, true);
}
void Video::setDvdImage(const QString &path)
{
- m_jobsInProgress.setBit(Video::DVDImage, true);
QFileInfo image(m_imagePath);
if (image.exists() && image != QFileInfo(path))
QFile::remove(m_imagePath);
QFile::rename(path, m_imagePath);
- m_jobsCompleted.setBit(Video::DVDImage, true);
+ m_jobsCompleted.setBit(DVDImage, true);
saveState();
- m_jobsInProgress.setBit(Video::DVDImage, false);
- emit jobCompleted(Video::DVDImage, true);
+ emit jobCompleted(DVDImage, true);
}
void Video::setPoster(const QIODevice &input)
{
- m_jobsInProgress.setBit(Video::Poster, true);
//TODO: save input to subtitle file
- m_jobsCompleted.setBit(Video::Poster, true);
+ m_jobsCompleted.setBit(Poster, true);
saveState();
- m_jobsInProgress.setBit(Video::Poster, false);
- emit jobCompleted(Video::Poster, true);
+ emit jobCompleted(Poster, true);
}
QString Video::title() const
{
@@ -166,17 +159,23 @@ void Video::setDvdTitle(int title)
if (m_dvdTitle == title)
return;
m_dvdTitle = title;
- if (m_jobsCompleted.at(Video::EncodeMP4)) {
- m_jobsCompleted.setBit(Video::EncodeMP4, false);
- emit jobCompleted(Video::EncodeMP4, false);
- if(m_jobsCompleted.at(Video::Upload)) {
- m_jobsCompleted.setBit(Video::Upload, false);
- emit jobCompleted(Video::Upload, false);
+ if (m_jobsCompleted.at(EncodeMP4)) {
+ m_jobsCompleted.setBit(EncodeMP4, false);
+ emit jobCompleted(EncodeMP4, false);
+ if(m_jobsCompleted.at(Upload)) {
+ m_jobsCompleted.setBit(Upload, false);
+ emit jobCompleted(Upload, false);
}
- //TODO: if its already encoding or uploading, cancel those jobs
}
+ terminateJobs(EncodeMP4);
+ terminateJobs(Upload);
saveState();
}
+void Video::terminateJobs(Jobs jobType)
+{
+ foreach(Job* job, m_jobsInProgress.values(jobType))
+ job->terminate();
+}
QMap<int, QString> Video::dvdTitles() const
{
return m_dvdTitles;
diff --git a/video.h b/video.h
index ec24ab2..908ba70 100644
--- a/video.h
+++ b/video.h
@@ -5,6 +5,7 @@
#include <QBitArray>
#include <QList>
#include <QMap>
+#include <QMultiHash>
class QIODevice;
class DVDImageJob;
@@ -32,7 +33,7 @@ public:
int dvdTitle() const;
void setDvdTitle(int title);
VideoGui* widget();
- bool isJobCompleted(Video::Jobs job) const;
+ bool isJobCompleted(Jobs job) const;
void setDvdTitles(QMap<int, QString> titles);
QMap<int, QString> dvdTitles() const;
QString imagePath() const;
@@ -41,7 +42,7 @@ public:
QString posterPath() const;
private:
QBitArray m_jobsCompleted;
- QBitArray m_jobsInProgress;
+ QMultiHash<Jobs, Job*> m_jobsInProgress;
QString m_title;
QString m_rootPath;
QString m_imagePath;
@@ -52,10 +53,11 @@ private:
QMap<int, QString> m_dvdTitles;
int m_dvdTitle;
void saveState();
+ void terminateJobs(Jobs jobType);
private slots:
void completedJob(bool success);
signals:
- void jobCompleted(Video::Jobs job, bool success);
+ void jobCompleted(Video::Jobs jobType, bool success);
};
#endif // VIDEO_H
diff --git a/videogui.cpp b/videogui.cpp
index 79a382e..12f1269 100644
--- a/videogui.cpp
+++ b/videogui.cpp
@@ -1,54 +1,53 @@
#include "videogui.h"
+#include "statuslabel.h"
#include <QCheckBox>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QComboBox>
#include <QMap>
+#include <QPushButton>
VideoGui::VideoGui(Video *video) :
m_video(video)
{
//TODO: disable first 4 without them going grey
- m_imageCheck = new QCheckBox(tr("Copied DVD ISO"), this);
- m_imageCheck->setChecked(video->isJobCompleted(Video::DVDImage));
- m_imageCheck->setEnabled(false);
- m_encodeCheck = new QCheckBox(tr("Encoded MP4"), this);
- m_encodeCheck->setChecked(video->isJobCompleted(Video::EncodeMP4));
- m_encodeCheck->setEnabled(false);
- m_uploadCheck = new QCheckBox(tr("Uploaded MP4"), this);
- m_uploadCheck->setChecked(video->isJobCompleted(Video::Upload));
- m_uploadCheck->setEnabled(false);
- m_titleLoadCheck = new QCheckBox(tr("Title-Loaded"), this);
- m_titleLoadCheck->setChecked(video->isJobCompleted(Video::TitleLoad));
- m_titleLoadCheck->setEnabled(false);
+ m_imageStatus = new StatusLabel(tr("Copied DVD ISO"), this);
+ m_imageStatus->setCompleted(video->isJobCompleted(Video::DVDImage));
+ m_encodeStatus = new StatusLabel(tr("Encoded MP4"), this);
+ m_encodeStatus->setCompleted(video->isJobCompleted(Video::EncodeMP4));
+ m_uploadStatus = new StatusLabel(tr("Uploaded MP4"), this);
+ m_uploadStatus->setCompleted(video->isJobCompleted(Video::Upload));
+ m_titleLoadStatus = new StatusLabel(tr("Title-Loaded"), this);
+ m_titleLoadStatus->setCompleted(video->isJobCompleted(Video::TitleLoad));
m_titleSelector = new QComboBox;
QMapIterator<int, QString> i(video->dvdTitles());
while (i.hasNext()) {
i.next();
- m_titleSelector->addItem(QString("Title %1: %2").arg(QString::number(i.key())).arg(i.value()), i.key());
+ m_titleSelector->addItem(tr("Title %1: %2").arg(QString::number(i.key())).arg(i.value()), i.key());
}
int currentIndex = m_titleSelector->findData(video->dvdTitle());
if (currentIndex == -1)
currentIndex = 0;
m_titleSelector->setCurrentIndex(currentIndex);
connect(m_titleSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(titleChanged(int)));
- QGridLayout *checkGrid = new QGridLayout;
- checkGrid->addWidget(m_imageCheck, 0, 0);
- checkGrid->addWidget(m_encodeCheck, 0, 1);
- checkGrid->addWidget(m_uploadCheck, 1, 0);
- checkGrid->addWidget(m_titleLoadCheck, 1, 1);
- checkGrid->addWidget(m_titleSelector, 0, 2);
- m_subtitleCheck = new QCheckBox(tr("Found Subtitle"), this);
- m_subtitleCheck->setChecked(video->isJobCompleted(Video::Subtitle));
- m_posterCheck = new QCheckBox(tr("Found Poster"), this);
- m_posterCheck->setChecked(video->isJobCompleted(Video::Poster));
+ QGridLayout *statusGrid = new QGridLayout;
+ statusGrid->addWidget(m_imageStatus, 0, 0);
+ statusGrid->addWidget(m_encodeStatus, 0, 1);
+ statusGrid->addWidget(m_uploadStatus, 1, 0);
+ statusGrid->addWidget(m_titleLoadStatus, 1, 1);
+ statusGrid->addWidget(m_titleSelector, 0, 2);
+ statusGrid->addWidget(new QPushButton("&Change Title Information"), 1, 2); //TODO: this is a placeholder
+ m_subtitleStatus = new StatusLabel(tr("Found Subtitle"), this);
+ m_subtitleStatus->setCompleted(video->isJobCompleted(Video::Subtitle));
+ m_posterStatus = new StatusLabel(tr("Found Poster"), this);
+ m_posterStatus->setCompleted(video->isJobCompleted(Video::Poster));
//TODO: actions for checking subtitle and poster check to actually do it
connect(video, SIGNAL(jobCompleted(Video::Jobs,bool)), this, SLOT(jobCompleted(Video::Jobs,bool)));
QHBoxLayout *layout = new QHBoxLayout;
- layout->addLayout(checkGrid);
- layout->addWidget(m_subtitleCheck);
- layout->addWidget(m_posterCheck);
+ layout->addLayout(statusGrid);
+ layout->addWidget(m_subtitleStatus);
+ layout->addWidget(m_posterStatus);
setLayout(layout);
setTitle(video->title());
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
@@ -57,22 +56,22 @@ void VideoGui::jobCompleted(Video::Jobs jobType, bool success)
{
switch (jobType) {
case Video::DVDImage:
- m_imageCheck->setChecked(success);
+ m_imageStatus->setCompleted(success);
break;
case Video::EncodeMP4:
- m_encodeCheck->setChecked(success);
+ m_encodeStatus->setCompleted(success);
break;
case Video::Upload:
- m_uploadCheck->setChecked(success);
+ m_uploadStatus->setCompleted(success);
break;
case Video::TitleLoad:
- m_titleLoadCheck->setChecked(success);
+ m_titleLoadStatus->setCompleted(success);
break;
case Video::Subtitle:
- m_subtitleCheck->setChecked(success);
+ m_subtitleStatus->setCompleted(success);
break;
case Video::Poster:
- m_posterCheck->setChecked(success);
+ m_posterStatus->setCompleted(success);
break;
}
}
diff --git a/videogui.h b/videogui.h
index dfbb1d2..0986309 100644
--- a/videogui.h
+++ b/videogui.h
@@ -3,7 +3,7 @@
#include <QGroupBox>
#include "video.h"
-class QCheckBox;
+class StatusLabel;
class QComboBox;
class Video;
@@ -13,12 +13,12 @@ class VideoGui : public QGroupBox
public:
VideoGui(Video *video);
private:
- QCheckBox *m_imageCheck;
- QCheckBox *m_encodeCheck;
- QCheckBox *m_uploadCheck;
- QCheckBox *m_titleLoadCheck;
- QCheckBox *m_subtitleCheck;
- QCheckBox *m_posterCheck;
+ StatusLabel *m_imageStatus;
+ StatusLabel *m_encodeStatus;
+ StatusLabel *m_uploadStatus;
+ StatusLabel *m_titleLoadStatus;
+ StatusLabel *m_subtitleStatus;
+ StatusLabel *m_posterStatus;
QComboBox *m_titleSelector;
Video *m_video;
private slots:
diff --git a/videoqueue.cpp b/videoqueue.cpp
index 468d17a..5a1db06 100644
--- a/videoqueue.cpp
+++ b/videoqueue.cpp
@@ -2,7 +2,6 @@
#include "video.h"
#include "jobqueue.h"
#include "job.h"
-
#include <QDebug>
VideoQueue::VideoQueue(QObject *parent) :