From 649196561081ab02a422e87bd3efdaceab95c1ad Mon Sep 17 00:00:00 2001 From: lordmulder Date: Fri, 10 Dec 2010 21:24:42 +0100 Subject: [PATCH] Add items to the playlist in the order the jobs are created, rather than in the order the jobs finish. As the jobs are created in source list order (but may finish in arbitrary order) this should result in "correct" playlist order. --- src/Config.h | 2 +- src/Dialog_Processing.cpp | 38 +++++++++++++++++++++++++------------- src/Dialog_Processing.h | 7 ++++--- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/Config.h b/src/Config.h index 00fb9f59..c6ef274a 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 136 +#define VER_LAMEXP_BUILD 137 #define VER_LAMEXP_SUFFIX TechPreview /* diff --git a/src/Dialog_Processing.cpp b/src/Dialog_Processing.cpp index a8dca62d..bd9d41f3 100644 --- a/src/Dialog_Processing.cpp +++ b/src/Dialog_Processing.cpp @@ -121,8 +121,9 @@ ProcessingDialog::ProcessingDialog(FileListModel *fileListModel, AudioFileModel //Init other vars m_runningThreads = 0; m_currentFile = 0; - m_succeededFiles = 0; - m_failedFiles = 0; + m_allJobs.clear(); + m_succeededJobs.clear(); + m_failedJobs.clear(); m_userAborted = false; } @@ -210,8 +211,9 @@ void ProcessingDialog::initEncoding(void) { m_runningThreads = 0; m_currentFile = 0; - m_succeededFiles = 0; - m_failedFiles = 0; + m_allJobs.clear(); + m_succeededJobs.clear(); + m_failedJobs.clear(); m_userAborted = false; m_playList.clear(); @@ -294,18 +296,18 @@ void ProcessingDialog::doneEncoding(void) CHANGE_BACKGROUND_COLOR(frame_header, QColor("#FFF3BA")); WinSevenTaskbar::setTaskbarState(this, WinSevenTaskbar::WinSevenTaskbarErrorState); WinSevenTaskbar::setOverlayIcon(this, &QIcon(":/icons/error.png")); - label_progress->setText((m_succeededFiles > 0) ? QString("Process was aborted by the user after %1 file(s)!").arg(QString::number(m_succeededFiles)) : "Process was aborted prematurely by the user!"); + label_progress->setText((m_succeededJobs.count() > 0) ? QString("Process was aborted by the user after %1 file(s)!").arg(QString::number(m_succeededJobs.count())) : "Process was aborted prematurely by the user!"); QApplication::processEvents(); if(m_settings->soundsEnabled()) PlaySound(MAKEINTRESOURCE(IDR_WAVE_ABORTED), GetModuleHandle(NULL), SND_RESOURCE | SND_SYNC); } else { - if(m_failedFiles) + if(m_failedJobs.count() > 0) { CHANGE_BACKGROUND_COLOR(frame_header, QColor("#FFBABA")); WinSevenTaskbar::setTaskbarState(this, WinSevenTaskbar::WinSevenTaskbarErrorState); WinSevenTaskbar::setOverlayIcon(this, &QIcon(":/icons/exclamation.png")); - label_progress->setText(QString("Error: %1 of %2 files failed. Double-click failed items for detailed information!").arg(QString::number(m_failedFiles), QString::number(m_failedFiles + m_succeededFiles))); + label_progress->setText(QString("Error: %1 of %2 files failed. Double-click failed items for detailed information!").arg(QString::number(m_failedJobs.count()), QString::number(m_failedJobs.count() + m_succeededJobs.count()))); QApplication::processEvents(); if(m_settings->soundsEnabled()) PlaySound(MAKEINTRESOURCE(IDR_WAVE_ERROR), GetModuleHandle(NULL), SND_RESOURCE | SND_SYNC); } @@ -336,12 +338,12 @@ void ProcessingDialog::processFinished(const QUuid &jobId, const QString &outFil { if(success) { - m_succeededFiles++; - m_playList.append(outFileName); + m_playList.insert(jobId, outFileName); + m_succeededJobs.append(jobId); } else { - m_failedFiles++; + m_failedJobs.append(jobId); } } @@ -423,7 +425,9 @@ void ProcessingDialog::startNextJob(void) } ProcessThread *thread = new ProcessThread(currentFile, (m_settings->outputToSourceDir() ? QFileInfo(currentFile.filePath()).absolutePath(): m_settings->outputDir()), encoder); + m_threadList.append(thread); + m_allJobs.append(thread->getId()); connect(thread, SIGNAL(finished()), this, SLOT(doneEncoding()), Qt::QueuedConnection); connect(thread, SIGNAL(processStateInitialized(QUuid,QString,QString,int)), m_progressModel, SLOT(addJob(QUuid,QString,QString,int)), Qt::QueuedConnection); @@ -437,6 +441,12 @@ void ProcessingDialog::startNextJob(void) void ProcessingDialog::writePlayList(void) { + if(m_succeededJobs.count() <= 0 || m_allJobs.count() <= 0) + { + qWarning("WritePlayList: Nothing to do!"); + return; + } + QString playListName = (m_metaInfo->fileAlbum().isEmpty() ? "Playlist" : m_metaInfo->fileAlbum()); const static char *invalidChars = "\\/:*?\"<>|"; @@ -453,14 +463,16 @@ void ProcessingDialog::writePlayList(void) { playListFile = QString("%1/%2 (%3).m3u").arg(m_settings->outputDir(), playListName, QString::number(++counter)); } - + QFile playList(playListFile); if(playList.open(QIODevice::WriteOnly)) { playList.write("#EXTM3U\r\n"); - for(int i = 0; i < m_playList.count(); i++) + for(int i = 0; i < m_allJobs.count(); i++) { - playList.write(QFileInfo(m_playList.at(i)).fileName().toUtf8().constData()); + + if(!m_succeededJobs.contains(m_allJobs.at(i))) continue; + playList.write(QFileInfo(m_playList.value(m_allJobs.at(i), "N/A")).fileName().toUtf8().constData()); playList.write("\r\n"); } playList.close(); diff --git a/src/Dialog_Processing.h b/src/Dialog_Processing.h index 69626cff..dacaaa3e 100644 --- a/src/Dialog_Processing.h +++ b/src/Dialog_Processing.h @@ -68,11 +68,12 @@ private: QList m_threadList; QMovie *m_progressIndicator; ProgressModel *m_progressModel; - QStringList m_playList; + QMap m_playList; QMenu *m_contextMenu; unsigned int m_runningThreads; unsigned int m_currentFile; - unsigned int m_succeededFiles; - unsigned int m_failedFiles; + QList m_allJobs; + QList m_succeededJobs; + QList m_failedJobs; bool m_userAborted; }; -- 2.11.0