diff --git a/src/Config.h b/src/Config.h index d982c2fc..56b45da1 100644 --- a/src/Config.h +++ b/src/Config.h @@ -29,8 +29,8 @@ #define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_LO 2 #define VER_LAMEXP_TYPE Beta -#define VER_LAMEXP_PATCH 4 -#define VER_LAMEXP_BUILD 553 +#define VER_LAMEXP_PATCH 5 +#define VER_LAMEXP_BUILD 554 /////////////////////////////////////////////////////////////////////////////// // Tools versions diff --git a/src/Dialog_CueImport.cpp b/src/Dialog_CueImport.cpp index 7f14ac70..d1de65a5 100644 --- a/src/Dialog_CueImport.cpp +++ b/src/Dialog_CueImport.cpp @@ -281,7 +281,7 @@ bool CueImportDialog::analyzeFiles(QStringList &files) void CueImportDialog::splitFiles(void) { - QString baseName = QFileInfo(m_cueFileName).completeBaseName().replace(".", " ").left(42).trimmed(); + QString baseName = QFileInfo(m_cueFileName).completeBaseName().replace(".", " ").simplified(); WorkingBanner *progress = new WorkingBanner(this); CueSplitter *splitter = new CueSplitter(m_outputDir, baseName, m_model, m_fileInfo); diff --git a/src/Thread_CueSplitter.cpp b/src/Thread_CueSplitter.cpp index b004749c..a4e4f60a 100644 --- a/src/Thread_CueSplitter.cpp +++ b/src/Thread_CueSplitter.cpp @@ -109,7 +109,7 @@ void CueSplitter::run() AbstractDecoder *decoder = DecoderRegistry::lookup(inputFileInfo.formatContainerType(), inputFileInfo.formatContainerProfile(), inputFileInfo.formatAudioType(), inputFileInfo.formatAudioProfile(), inputFileInfo.formatAudioVersion()); if(decoder) { - m_activeFile = QFileInfo(inputFileList.at(i)).fileName().left(54).trimmed(); + m_activeFile = shortName(QFileInfo(inputFileList.at(i)).fileName()); emit fileSelected(m_activeFile); QString tempFile = QString("%1/~%2.wav").arg(m_outputDir, lamexp_rand_str()); connect(decoder, SIGNAL(statusUpdated(int)), this, SLOT(handleUpdate(int)), Qt::DirectConnection); @@ -147,13 +147,14 @@ void CueSplitter::run() QString albumPerformer = m_model->getAlbumPerformer(); QString albumTitle = m_model->getAlbumTitle(); - //Now split all tracks + //Now split all files for(int i = 0; i < nFiles; i++) { int nTracks = m_model->getTrackCount(i); QString trackFile = m_model->getFileName(i); int maxProgress = 0; + //Process all tracks for(int j = 0; j < nTracks; j++) { int trackNo = m_model->getTrackNo(i, j); @@ -167,6 +168,7 @@ void CueSplitter::run() continue; } + //Setup meta info AudioFileModel trackMetaInfo(QString().sprintf("cue://File%02d/Track%02d", i, j)); trackMetaInfo.setFileName(m_model->getTrackTitle(i, j)); trackMetaInfo.setFileArtist(m_model->getTrackPerformer(i, j)); @@ -185,13 +187,16 @@ void CueSplitter::run() trackMetaInfo.setFileDuration(static_cast(abs(trackLength))); } - QString outputFile = QString("%1/%2 - Track %3.wav").arg(m_outputDir, m_baseName, QString().sprintf("%02d", trackNo)); + //Generate output file name + QString trackTitle = trackMetaInfo.fileName().isEmpty() ? QString().sprintf("Track %02d", trackNo) : trackMetaInfo.fileName(); + QString outputFile = QString("%1/[%2] %3 - %4.wav").arg(m_outputDir, QString().sprintf("%02d", trackNo), m_baseName, trackTitle); for(int n = 2; QFileInfo(outputFile).exists(); n++) { - outputFile = QString("%1/%2 - Track %3 (%4).wav").arg(m_outputDir, m_baseName, QString().sprintf("%02d", trackNo), QString::number(n)); + outputFile = QString("%1/[%2] %3 - %4 (%5).wav").arg(m_outputDir, QString().sprintf("%02d", trackNo), m_baseName, trackTitle, QString::number(n)); } - emit fileSelected(QFileInfo(outputFile).fileName()); + //Call split function + emit fileSelected(shortName(QFileInfo(outputFile).fileName())); splitFile(outputFile, trackNo, trackFile, trackOffset, trackLength, trackMetaInfo, maxProgress); if(m_abortFlag) @@ -236,7 +241,7 @@ void CueSplitter::splitFile(const QString &output, const int trackNo, const QStr return; } - QString baseName = QFileInfo(output).fileName(); + QString baseName = shortName(QFileInfo(output).fileName()); QString decompressedInput = m_decompressedFiles[file]; qDebug("Input: <%s>", decompressedInput.toUtf8().constData()); @@ -389,6 +394,18 @@ QString CueSplitter::indexToString(const double index) const return time.toString(time.hour() ? "H:mm:ss.zzz" : "m:ss.zzz"); } +QString CueSplitter::shortName(const QString &longName) const +{ + static const int maxLen = 54; + + if(longName.length() > maxLen) + { + return QString("%1...%2").arg(longName.left(maxLen/2).trimmed(), longName.right(maxLen/2).trimmed()); + } + + return longName; +} + //////////////////////////////////////////////////////////// // EVENTS //////////////////////////////////////////////////////////// diff --git a/src/Thread_CueSplitter.h b/src/Thread_CueSplitter.h index a3717a0a..74f2a0cf 100644 --- a/src/Thread_CueSplitter.h +++ b/src/Thread_CueSplitter.h @@ -62,6 +62,7 @@ public slots: private: void splitFile(const QString &output, const int trackNo, const QString &file, const double offset, const double length, const AudioFileModel &metaInfo, int &maxProgress); QString indexToString(const double index) const; + QString shortName(const QString &longName) const; const QString m_soxBin; const QString m_outputDir;