diff --git a/src/engines/gstpipelinebase.cpp b/src/engines/gstpipelinebase.cpp index b8a3efc7b..92dd9bf41 100644 --- a/src/engines/gstpipelinebase.cpp +++ b/src/engines/gstpipelinebase.cpp @@ -69,7 +69,7 @@ void GstPipelineModel::RemovePipeline(int id) { removeRow(row); } -int GstPipelineModel::FindRowById(int id) { +int GstPipelineModel::FindRowById(int id) const { for (int i = 0; i < rowCount(); i++) { if (item(i)->data(Role::Role_Id).toInt() == id) return i; } diff --git a/src/transcoder/transcodedialog.cpp b/src/transcoder/transcodedialog.cpp index 9e6d1db65..e03f17df5 100644 --- a/src/transcoder/transcodedialog.cpp +++ b/src/transcoder/transcodedialog.cpp @@ -49,8 +49,8 @@ static bool ComparePresetsByName(const TranscoderPreset& left, TranscodeDialog::TranscodeDialog(QWidget* parent) : QDialog(parent), ui_(new Ui_TranscodeDialog), - log_ui_(new Ui_TranscodeLogDialog), - log_dialog_(new QDialog(this)), + details_ui_(new Ui_TranscodeLogDialog), + details_dialog_(new QDialog(this)), transcoder_(new Transcoder(this)), queued_(0), finished_success_(0), @@ -58,10 +58,11 @@ TranscodeDialog::TranscodeDialog(QWidget* parent) ui_->setupUi(this); ui_->files->header()->setSectionResizeMode(QHeaderView::ResizeToContents); - log_ui_->setupUi(log_dialog_); - QPushButton* clear_button = - log_ui_->buttonBox->addButton(tr("Clear"), QDialogButtonBox::ResetRole); - connect(clear_button, SIGNAL(clicked()), log_ui_->log, SLOT(clear())); + details_ui_->setupUi(details_dialog_); + details_ui_->pipelines->setModel(transcoder_->model()); + QPushButton* clear_button = details_ui_->buttonBox->addButton( + tr("Clear"), QDialogButtonBox::ResetRole); + connect(clear_button, SIGNAL(clicked()), details_ui_->log, SLOT(clear())); // Get presets QList presets = Transcoder::GetAllPresets(); @@ -107,7 +108,7 @@ TranscodeDialog::TranscodeDialog(QWidget* parent) connect(start_button_, SIGNAL(clicked()), SLOT(Start())); connect(cancel_button_, SIGNAL(clicked()), SLOT(Cancel())); connect(close_button_, SIGNAL(clicked()), SLOT(hide())); - connect(ui_->details, SIGNAL(clicked()), log_dialog_, SLOT(show())); + connect(ui_->details, SIGNAL(clicked()), details_dialog_, SLOT(show())); connect(ui_->options, SIGNAL(clicked()), SLOT(Options())); connect(ui_->select, SIGNAL(clicked()), SLOT(AddDestination())); @@ -117,10 +118,7 @@ TranscodeDialog::TranscodeDialog(QWidget* parent) connect(transcoder_, SIGNAL(AllJobsComplete()), SLOT(AllJobsComplete())); } -TranscodeDialog::~TranscodeDialog() { - delete log_ui_; - delete ui_; -} +TranscodeDialog::~TranscodeDialog() {} void TranscodeDialog::SetWorking(bool working) { start_button_->setVisible(!working); @@ -278,7 +276,7 @@ void TranscodeDialog::Remove() { qDeleteAll(ui_->files->selectedItems()); } void TranscodeDialog::LogLine(const QString& message) { QString date(QDateTime::currentDateTime().toString(Qt::TextDate)); - log_ui_->log->appendPlainText(QString("%1: %2").arg(date, message)); + details_ui_->log->appendPlainText(QString("%1: %2").arg(date, message)); } void TranscodeDialog::timerEvent(QTimerEvent* e) { diff --git a/src/transcoder/transcodedialog.h b/src/transcoder/transcodedialog.h index ce23e83d3..1ee1a0543 100644 --- a/src/transcoder/transcodedialog.h +++ b/src/transcoder/transcodedialog.h @@ -21,6 +21,7 @@ #include #include #include +#include class Transcoder; class Ui_TranscodeDialog; @@ -64,9 +65,9 @@ class TranscodeDialog : public QDialog { const TranscoderPreset& preset) const; private: - Ui_TranscodeDialog* ui_; - Ui_TranscodeLogDialog* log_ui_; - QDialog* log_dialog_; + std::unique_ptr ui_; + std::unique_ptr details_ui_; + QDialog* details_dialog_; QBasicTimer progress_timer_; diff --git a/src/transcoder/transcodelogdialog.ui b/src/transcoder/transcodelogdialog.ui index 53f8f0304..ca31181c6 100644 --- a/src/transcoder/transcodelogdialog.ui +++ b/src/transcoder/transcodelogdialog.ui @@ -11,7 +11,7 @@ - Transcoder Log + Transcoder Details @@ -19,10 +19,56 @@ - - - true + + + + 0 + 0 + + + Pipelines + + + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + Logs + + + + + + + 0 + 0 + + + + true + + + + diff --git a/src/transcoder/transcoder.cpp b/src/transcoder/transcoder.cpp index c9d8a1891..a3f1c0ee4 100644 --- a/src/transcoder/transcoder.cpp +++ b/src/transcoder/transcoder.cpp @@ -195,10 +195,16 @@ void Transcoder::JobState::PostFinished(bool success) { new Transcoder::JobFinishedEvent(this, success)); } +QString Transcoder::JobState::GetDisplayName() { + return QFileInfo(job_.input).fileName() + " => " + + QFileInfo(job_.output).fileName(); +} + Transcoder::Transcoder(QObject* parent, const QString& settings_postfix) : QObject(parent), max_threads_(QThread::idealThreadCount()), - settings_postfix_(settings_postfix) { + settings_postfix_(settings_postfix), + model_(new GstPipelineModel(this)) { if (JobFinishedEvent::sEventType == -1) JobFinishedEvent::sEventType = QEvent::registerEventType(); @@ -459,6 +465,7 @@ bool Transcoder::StartJob(const Job& job) { // something else. Keep the JobState object around. It'll post an event // to our event loop when it finishes. current_jobs_ << state; + model_->AddPipeline(state->id(), state->GetDisplayName()); return true; } @@ -489,6 +496,7 @@ bool Transcoder::event(QEvent* e) { nullptr, nullptr, nullptr); // Remove it from the list - this will also destroy the GStreamer pipeline + model_->RemovePipeline((*it)->id()); current_jobs_.erase(it); // Emit the finished signal @@ -527,6 +535,7 @@ void Transcoder::Cancel() { } // Remove the job, this destroys the GStreamer pipeline too + model_->RemovePipeline((*it)->id()); it = current_jobs_.erase(it); } } diff --git a/src/transcoder/transcoder.h b/src/transcoder/transcoder.h index eea458843..16165e24a 100644 --- a/src/transcoder/transcoder.h +++ b/src/transcoder/transcoder.h @@ -63,6 +63,8 @@ class Transcoder : public QObject { QMap GetProgress() const; int QueuedJobsCount() const { return queued_jobs_.count(); } + GstPipelineModel* model() { return model_; } + public slots: void Start(); void Cancel(); @@ -97,6 +99,7 @@ class Transcoder : public QObject { void ReportError(GstMessage* msg); GstElement* Pipeline() { return pipeline_; } + QString GetDisplayName(); Job job_; Transcoder* parent_; @@ -143,6 +146,7 @@ class Transcoder : public QObject { QList queued_jobs_; JobStateList current_jobs_; QString settings_postfix_; + GstPipelineModel* model_; }; #endif // TRANSCODER_H