diff --git a/gui/ProcessingDialog.ui b/gui/ProcessingDialog.ui index 372b6ade..af5e531e 100644 --- a/gui/ProcessingDialog.ui +++ b/gui/ProcessingDialog.ui @@ -13,6 +13,10 @@ LameXP - Processing + + + :/icons/sound.png:/icons/sound.png + 0 @@ -169,7 +173,7 @@ - 12 + 16 20 @@ -428,6 +432,8 @@ + + diff --git a/res/icons/media_play.png b/res/icons/media_play.png new file mode 100644 index 00000000..8d66deb6 Binary files /dev/null and b/res/icons/media_play.png differ diff --git a/src/Config.h b/src/Config.h index 8f40093f..ec446483 100644 --- a/src/Config.h +++ b/src/Config.h @@ -25,7 +25,7 @@ #define VER_LAMEXP_MAJOR 4 #define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_LO 0 -#define VER_LAMEXP_BUILD 38 +#define VER_LAMEXP_BUILD 40 #define VER_LAMEXP_SUFFIX TechPreview /* diff --git a/src/Dialog_Processing.cpp b/src/Dialog_Processing.cpp index 755a4c2b..f1cabe66 100644 --- a/src/Dialog_Processing.cpp +++ b/src/Dialog_Processing.cpp @@ -45,9 +45,14 @@ ProcessingDialog::ProcessingDialog(void) //Init the dialog, from the .ui file setupUi(this); setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint); + + //Setup version info label_versionInfo->setText(QString().sprintf("v%d.%02d %s (Build %d)", lamexp_version_major(), lamexp_version_minor(), lamexp_version_release(), lamexp_version_build())); label_versionInfo->installEventFilter(this); + //Register meta type + qRegisterMetaType("QUuid"); + //Center window in screen QRect desktopRect = QApplication::desktop()->screenGeometry(); QRect thisRect = this->geometry(); @@ -102,7 +107,7 @@ void ProcessingDialog::showEvent(QShowEvent *event) void ProcessingDialog::closeEvent(QCloseEvent *event) { - if(!button_closeDialog->isEnabled() || m_thread) event->ignore(); + if(!button_closeDialog->isEnabled()) event->ignore(); } bool ProcessingDialog::eventFilter(QObject *obj, QEvent *event) @@ -149,8 +154,8 @@ void ProcessingDialog::initEncoding(void) { m_thread[i] = new ProcessThread(); connect(m_thread[i], SIGNAL(finished()), this, SLOT(doneEncoding()), Qt::QueuedConnection); - connect(m_thread[i], SIGNAL(processStateInitialized(QString,QString,QString,int)), m_progressModel, SLOT(addJob(QString,QString,QString,int)), Qt::QueuedConnection); - connect(m_thread[i], SIGNAL(processStateChanged(QString,QString,int)), m_progressModel, SLOT(updateJob(QString,QString,int)), Qt::QueuedConnection); + connect(m_thread[i], SIGNAL(processStateInitialized(QUuid,QString,QString,int)), m_progressModel, SLOT(addJob(QUuid,QString,QString,int)), Qt::QueuedConnection); + connect(m_thread[i], SIGNAL(processStateChanged(QUuid,QString,int)), m_progressModel, SLOT(updateJob(QUuid,QString,int)), Qt::QueuedConnection); m_thread[i]->start(); } diff --git a/src/Model_Progress.cpp b/src/Model_Progress.cpp index 3467e031..7ea749df 100644 --- a/src/Model_Progress.cpp +++ b/src/Model_Progress.cpp @@ -21,6 +21,8 @@ #include "Model_Progress.h" +#include + ProgressModel::ProgressModel(void) : m_iconRunning(":/icons/media_play.png"), m_iconPaused(":/icons/control_pause_blue.png"), @@ -113,34 +115,30 @@ QVariant ProgressModel::headerData(int section, Qt::Orientation orientation, int return QVariant(); } -void ProgressModel::addJob(const QString &jobId, const QString &jobName, const QString &jobInitialStatus, int jobInitialState) +void ProgressModel::addJob(const QUuid &jobId, const QString &jobName, const QString &jobInitialStatus, int jobInitialState) { - if(m_jobList.contains(jobId, Qt::CaseInsensitive)) + if(m_jobList.contains(jobId)) { return; } - QString id = jobId.toLower(); - beginResetModel(); - m_jobList.append(id); - m_jobName.insert(id, jobName); - m_jobStatus.insert(id, jobInitialStatus); - m_jobState.insert(id, jobInitialState); + m_jobList.append(jobId); + m_jobName.insert(jobId, jobName); + m_jobStatus.insert(jobId, jobInitialStatus); + m_jobState.insert(jobId, jobInitialState); endResetModel(); } -void ProgressModel::updateJob(const QString &jobId, const QString &newStatus, int newState) +void ProgressModel::updateJob(const QUuid &jobId, const QString &newStatus, int newState) { - if(!m_jobList.contains(jobId, Qt::CaseInsensitive)) + if(!m_jobList.contains(jobId)) { return; } - - QString id = jobId.toLower(); - + beginResetModel(); - if(!newStatus.isEmpty()) m_jobStatus.insert(id, newStatus); - if(newState >= 0) m_jobState.insert(id, newState); + if(!newStatus.isEmpty()) m_jobStatus.insert(jobId, newStatus); + if(newState >= 0) m_jobState.insert(jobId, newState); endResetModel(); } diff --git a/src/Model_Progress.h b/src/Model_Progress.h index 6abf4ca2..8e0564c1 100644 --- a/src/Model_Progress.h +++ b/src/Model_Progress.h @@ -27,6 +27,7 @@ #include #include #include +#include class ProgressModel : public QAbstractTableModel { @@ -52,14 +53,14 @@ public: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; public slots: - void addJob(const QString &jobId, const QString &jobName, const QString &jobInitialStatus = QString("Initializing..."), int jobInitialState = JobRunning); - void updateJob(const QString &jobId, const QString &newStatus, int newState); + void addJob(const QUuid &jobId, const QString &jobName, const QString &jobInitialStatus = QString("Initializing..."), int jobInitialState = JobRunning); + void updateJob(const QUuid &jobId, const QString &newStatus, int newState); private: - QStringList m_jobList; - QMap m_jobName; - QMap m_jobStatus; - QMap m_jobState; + QList m_jobList; + QMap m_jobName; + QMap m_jobStatus; + QMap m_jobState; const QIcon m_iconRunning; const QIcon m_iconPaused; diff --git a/src/Thread_FileAnalyzer.cpp b/src/Thread_FileAnalyzer.cpp index ac3a6853..0182af26 100644 --- a/src/Thread_FileAnalyzer.cpp +++ b/src/Thread_FileAnalyzer.cpp @@ -116,6 +116,7 @@ const AudioFileModel FileAnalyzer::analyzeFile(const QString &filePath) if(!process.waitForStarted()) { qWarning("MediaInfo process failed to create!"); + qWarning("Error message: \"%s\"\n", process.errorString().toLatin1().constData()); process.kill(); process.waitForFinished(-1); return audioFile; @@ -134,10 +135,11 @@ const AudioFileModel FileAnalyzer::analyzeFile(const QString &filePath) } } - QByteArray data = process.readLine().constData(); - while(data.size() > 0) + QByteArray data; + + while(process.canReadLine()) { - QString line = QString::fromUtf8(data).simplified(); + QString line = QString::fromUtf8(process.readLine().constData()).simplified(); if(!line.isEmpty()) { int index = line.indexOf(':'); @@ -155,7 +157,6 @@ const AudioFileModel FileAnalyzer::analyzeFile(const QString &filePath) updateSection(line); } } - data = process.readLine().constData(); } } diff --git a/src/Thread_Initialization.cpp b/src/Thread_Initialization.cpp index 3835c924..8f7f6be2 100644 --- a/src/Thread_Initialization.cpp +++ b/src/Thread_Initialization.cpp @@ -177,6 +177,7 @@ void InitializationThread::initNeroAac(void) if(!process.waitForStarted()) { qWarning("Nero process failed to create!"); + qWarning("Error message: \"%s\"\n", process.errorString().toLatin1().constData()); process.kill(); process.waitForFinished(-1); for(int i = 0; i < 3; i++) LAMEXP_DELETE(neroBin[i]); @@ -199,10 +200,9 @@ void InitializationThread::initNeroAac(void) } } - QByteArray data = process.readLine(); - while(!data.isEmpty()) + while(process.canReadLine()) { - QString line = QString::fromUtf8(data.constData()).simplified(); + QString line = QString::fromUtf8(process.readLine().constData()).simplified(); QStringList tokens = line.split(" ", QString::SkipEmptyParts, Qt::CaseInsensitive); int index1 = tokens.indexOf("Package"); int index2 = tokens.indexOf("version:"); @@ -218,7 +218,6 @@ void InitializationThread::initNeroAac(void) neroVersion += versionTokens.at(0).toInt() * 1000; } } - data = process.readLine(); } } diff --git a/src/Thread_Process.cpp b/src/Thread_Process.cpp index 2829d6ab..f7e4d197 100644 --- a/src/Thread_Process.cpp +++ b/src/Thread_Process.cpp @@ -33,7 +33,7 @@ //////////////////////////////////////////////////////////// ProcessThread::ProcessThread(void) - : m_jobId(QUuid::createUuid().toString()), m_aborted(false) + : m_jobId(QUuid::createUuid()), m_aborted(false) { } @@ -45,11 +45,11 @@ void ProcessThread::run() { m_aborted = false; - qDebug("Process thread %s has started.", m_jobId.toLatin1().constData()); + qDebug("Process thread %s has started.", m_jobId.toString().toLatin1().constData()); emit processStateInitialized(m_jobId, "Slime - Der Tod Ist Ein Meister Aus Deutschland.mp3", "Starting...", ProgressModel::JobRunning); QUuid uuid = QUuid::createUuid(); - qsrand(uuid.data1 * uuid.data2 * uuid.data3); + qsrand(uuid.data1 * uuid.data2 * uuid.data3 * uuid.data4[0] * uuid.data4[1] * uuid.data4[2] * uuid.data4[3] * uuid.data4[4] * uuid.data4[5] * uuid.data4[6] * uuid.data4[7]); unsigned long delay = 250 + (qrand() % 500); @@ -63,11 +63,10 @@ void ProcessThread::run() QThread::msleep(delay); emit processStateChanged(m_jobId, QString("Encoding (%1%)").arg(i), ProgressModel::JobRunning); - qDebug("Process thread is alive."); } emit processStateChanged(m_jobId, "Done (100%)", ProgressModel::JobComplete); - qDebug("Process thread is about to die..."); + qDebug("Process thread is done."); } //////////////////////////////////////////////////////////// diff --git a/src/Thread_Process.h b/src/Thread_Process.h index 551fe8e7..158fc005 100644 --- a/src/Thread_Process.h +++ b/src/Thread_Process.h @@ -22,6 +22,7 @@ #pragma once #include +#include class ProcessThread: public QThread { @@ -34,10 +35,10 @@ public: void abort() { m_aborted = true; } signals: - void processStateInitialized(const QString &jobId, const QString &jobName, const QString &jobInitialStatus, int jobInitialState); - void processStateChanged(const QString &jobId, const QString &newStatus, int newState); + void processStateInitialized(const QUuid &jobId, const QString &jobName, const QString &jobInitialStatus, int jobInitialState); + void processStateChanged(const QUuid &jobId, const QString &newStatus, int newState); private: - const QString m_jobId; + const QUuid m_jobId; volatile bool m_aborted; };