From cf45f0391feef4f83b8c84f0ad2f7f9e0d06ae00 Mon Sep 17 00:00:00 2001 From: lordmulder Date: Sat, 19 Mar 2011 15:35:17 +0100 Subject: [PATCH] Detect the .cda files that can be found in the root of the "dummy" file systems that Windows emulates for Audio-CD's. If such files are encountered, we tell the user gently to rip the audio tracks with EAC. --- etc/Translation/Blank.ts | 16 ++++++++++++++++ etc/Translation/LameXP_DE.ts | 16 ++++++++++++++++ etc/Translation/LameXP_ES.ts | 16 ++++++++++++++++ etc/Translation/LameXP_FR.ts | 16 ++++++++++++++++ etc/Translation/LameXP_IT.ts | 16 ++++++++++++++++ etc/Translation/LameXP_RU.ts | 16 ++++++++++++++++ etc/Translation/LameXP_UK.ts | 16 ++++++++++++++++ res/localization/LameXP_DE.qm | Bin 54206 -> 55055 bytes src/Config.h | 2 +- src/Dialog_MainWindow.cpp | 4 ++++ src/Thread_FileAnalyzer.cpp | 30 +++++++++++++++++++++++++++--- src/Thread_FileAnalyzer.h | 3 +++ 12 files changed, 147 insertions(+), 4 deletions(-) diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts index 401a901e..06528364 100644 --- a/etc/Translation/Blank.ts +++ b/etc/Translation/Blank.ts @@ -774,6 +774,22 @@ + CDA Files + + + + %1 file(s) have been rejected, because they are dummy CDDA files! + + + + Sorry, LameXP cannot extract audio tracks from an Audio&minus;CD at present. + + + + We recommend using %1 for that purpose. + + + Files Rejected diff --git a/etc/Translation/LameXP_DE.ts b/etc/Translation/LameXP_DE.ts index 92dc3324..24f2646e 100644 --- a/etc/Translation/LameXP_DE.ts +++ b/etc/Translation/LameXP_DE.ts @@ -1194,6 +1194,22 @@ Cannot write to the selected directory. Please choose another directory! In das ausgewählte Verzeichnis kann nicht geschrieben werden. Bitte ein anderes Verzeichnis auswählen! + + CDA Files + CDA Dateien + + + %1 file(s) have been rejected, because they are dummy CDDA files! + %1 Datei(en) wurden abgewiesen, weil es sich um CDDA Platzhalter&minus;Dateien handelt! + + + Sorry, LameXP cannot extract audio tracks from an Audio&minus;CD at present. + LameXP ist derzeit leider nicht dazu in der Lage, Audio Tracks von einer Audio&minus;CD zu extrahieren. + + + We recommend using %1 for that purpose. + Es wird empfohlen %1 für diesen Zweck zu verwenden. + MetaInfo diff --git a/etc/Translation/LameXP_ES.ts b/etc/Translation/LameXP_ES.ts index 8967be72..1b7fcc0b 100644 --- a/etc/Translation/LameXP_ES.ts +++ b/etc/Translation/LameXP_ES.ts @@ -1193,6 +1193,22 @@ Cannot write to the selected directory. Please choose another directory! + + CDA Files + + + + %1 file(s) have been rejected, because they are dummy CDDA files! + + + + We recommend using %1 for that purpose. + + + + Sorry, LameXP cannot extract audio tracks from an Audio&minus;CD at present. + + MetaInfo diff --git a/etc/Translation/LameXP_FR.ts b/etc/Translation/LameXP_FR.ts index 88a205f2..7f33cec1 100644 --- a/etc/Translation/LameXP_FR.ts +++ b/etc/Translation/LameXP_FR.ts @@ -1202,6 +1202,22 @@ Sélection automatique (par défaut) Cannot write to the selected directory. Please choose another directory! + + CDA Files + + + + %1 file(s) have been rejected, because they are dummy CDDA files! + + + + We recommend using %1 for that purpose. + + + + Sorry, LameXP cannot extract audio tracks from an Audio&minus;CD at present. + + MetaInfo diff --git a/etc/Translation/LameXP_IT.ts b/etc/Translation/LameXP_IT.ts index 37ab152b..14dcd6b9 100644 --- a/etc/Translation/LameXP_IT.ts +++ b/etc/Translation/LameXP_IT.ts @@ -1194,6 +1194,22 @@ Cannot write to the selected directory. Please choose another directory! + + CDA Files + + + + %1 file(s) have been rejected, because they are dummy CDDA files! + + + + We recommend using %1 for that purpose. + + + + Sorry, LameXP cannot extract audio tracks from an Audio&minus;CD at present. + + MetaInfo diff --git a/etc/Translation/LameXP_RU.ts b/etc/Translation/LameXP_RU.ts index 13df0478..ad1df0ae 100644 --- a/etc/Translation/LameXP_RU.ts +++ b/etc/Translation/LameXP_RU.ts @@ -1196,6 +1196,22 @@ Cannot write to the selected directory. Please choose another directory! + + CDA Files + + + + %1 file(s) have been rejected, because they are dummy CDDA files! + + + + We recommend using %1 for that purpose. + + + + Sorry, LameXP cannot extract audio tracks from an Audio&minus;CD at present. + + MetaInfo diff --git a/etc/Translation/LameXP_UK.ts b/etc/Translation/LameXP_UK.ts index 113fd944..97c19ebb 100644 --- a/etc/Translation/LameXP_UK.ts +++ b/etc/Translation/LameXP_UK.ts @@ -1193,6 +1193,22 @@ Cannot write to the selected directory. Please choose another directory! + + CDA Files + + + + %1 file(s) have been rejected, because they are dummy CDDA files! + + + + We recommend using %1 for that purpose. + + + + Sorry, LameXP cannot extract audio tracks from an Audio&minus;CD at present. + + MetaInfo diff --git a/res/localization/LameXP_DE.qm b/res/localization/LameXP_DE.qm index 97b6dec2c0c5a40917353562118f187214dbe1a8..079400421eafc4fd7e720ad704333a28965f2e98 100644 GIT binary patch delta 3934 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 K!2XqnA^!nIH)Rw6 delta 3308 zcmXX|c|c8h8-DIR+r8(Wdry-Z6s1Ipl4MO}D`jXwlom-S$zzD$ZUjXL} z>|9UQ3kcZ^`1k_HUFdf;u-*t*`i7-oQ{s85(9&-ueihrygX;3zM5}W3SD8DVF68st&)zkODk)4cePXSJ> zVocYz5+rvRtL|hEl`#%}!NB*&8HZeZz_^a-AHN^y>&dvVEyQRr9vvKjKF!SJn+js^ zM`lWgSYo-%Ol|w$&WQIp;Eo>>pHlK9gmX zPYLEQxebZH)(EDs+MQT+mMOZ~52(1#oci(|jmc2vQr!(;k`Hq=OGQ0tU~WyKgqN>m z6_HDTb&FZ9&0kO$%a5S~7HL`CJG}?dT+14~-v#VXXUFy$0{D((#||Azj>oWmYu5m7 zr`qkArEHYxM1t6fUA!zAs5!!JkUs&#J=u*r2)X_X+07+{MA8d3-J={BJgeO%o3jTB zH&Vjh?71>ubR3 z$!x6;1z5R=y)m1FA!HnTCnb*Pf0cc7PzSIt*cX**U|=7%)sOu6mT(4tCIF#zs;pxrjA?5T*l@CU{^+>`He1zSnbj?d-J4Y*024dbfkp9H)DxLbEpC|`-IAF>MA7tY-) zas_Pdxu(5T|1SyLqtOe2o_}%8Ma1d25UzFdBB0owXHt#<9gpyGeI`&cm$#G&w<#O> zUMx-V_D#HF0SVzq7k;#13sEg5j~}yxglxw+-ouQ5N^#*m3r~}txbPE3SP`(t_<-Hi zS)U$!$T7-1^ z6+1#WvW351c%Nh=hOBvbUgbpG>SvgNIQlF#ub_>>lM9D3j&}$!2GJ80JQC_GAk)ZY==DJP~G1pyBp9B`nu_&m@IhEi6y|Kts1v_)!@H{OB(vZ<$3I zn+d5a2!Zasg*1Z;fMh46)h(j{LxkNv)Pgh@A^Ut^VDvK~x6?>k0WQKp^(B&-ZbC_{ z194}oa8yUF+gTu-`V(`@R+&7f-Wr&ytcWsZ}nk+ih~HUKM9f!)D2<62F}XjuxoW zQjY@hTU8m4S<*X&>TpOJ5ay`5bcHNer+VONLK41E_0}m2FsW008##*9B3I1>QGjk& z)JBQ|;!HQS)$>2;9H90L&IA@)sK?Kz@7KnwXJ%3%o1@gTuM$$b^{MKJBb30t?&_#z z1bts)bxhA?K`~&``fP%p5o>v>wCcTBXX*)1q#r_=_DeLvu3A6iJtqU z$!UrP$~tNe6uzJqHfhco=F^Jlq^VA;2loD@xgil(y7blDG_?mDIn8_Li6m$bHD7!w z&X8*ob6)QRbn=zDW;Rn#ewNIFF4K72mn@Xjl3-r4{_>RAJU|*~Xb5!uRr1*OiWGg1 zN$*u%Zu$Pp+m`Egdk}{0^f$7E4p^RNrVWE^arq|Rohl#xP8+(HdRTZ(yCi|gn7&_|Hpz@6bD4IJKwL4% z)aDve;PB7d^3n7>bbz+v`<1lKHQI}2=YVNu+8a3!0h@=~SJ9*C1{S3Kqv9Ivm_6FJ zGR1SO(*8Y=1j;&1uQUHC6d32Kv$5<&cf#Lwz4i9AJT*GIAbN3lk#3MjHEqWd-N^Ce zpmUlo?5;lra@Ea>e?Tp9&_%6p1&qe%qAow7c{kQYe@+HAb<(Zx+O|Dwb@ARrT63i? zeQ6vC**IOMVJS)V8Qp=nsf4V)m+p~i46x+7uK9T#Wo)7QL)#Ddsk`pea3gBT3*DzQ z`Y`RatgR@ZL?pReWGrp@C9>t|1faS}wr?fG1ao;x$0bxiwmda}5bm{(0uHLea z$bLqy$+4iDVvv0I1Szz4oP3|r(f8JJQ#rjaos(ZK-Au|I9|2sfVJMKT dpA-jYU1?|M1)9=}ZoE?|x5me)RGF-G`yVa%$1?x` diff --git a/src/Config.h b/src/Config.h index ad93ad63..055edc1b 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 1 -#define VER_LAMEXP_BUILD 373 +#define VER_LAMEXP_BUILD 375 #define VER_LAMEXP_SUFFIX Beta-9 /* diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp index 4f563203..eb632a82 100644 --- a/src/Dialog_MainWindow.cpp +++ b/src/Dialog_MainWindow.cpp @@ -436,6 +436,10 @@ void MainWindow::addFiles(const QStringList &files) { QMessageBox::warning(this, tr("Access Denied"), QString("%1
%2
").arg(tr("%1 file(s) have been rejected, because read access was not granted!").arg(analyzer->filesDenied()), tr("This usually means the file is locked by another process."))); } + if(analyzer->filesDummyCDDA()) + { + QMessageBox::warning(this, tr("CDA Files"), QString("%1

%2
%3
").arg(tr("%1 file(s) have been rejected, because they are dummy CDDA files!").arg(analyzer->filesDummyCDDA()), tr("Sorry, LameXP cannot extract audio tracks from an Audio−CD at present."), tr("We recommend using %1 for that purpose.").arg("Exact Audio Copy"))); + } if(analyzer->filesRejected()) { QMessageBox::warning(this, tr("Files Rejected"), QString("%1
%2
").arg(tr("%1 file(s) have been rejected, because the file format could not be recognized!").arg(analyzer->filesRejected()), tr("This usually means the file is damaged or the file format is not supported."))); diff --git a/src/Thread_FileAnalyzer.cpp b/src/Thread_FileAnalyzer.cpp index cb9dc90c..0a0eb069 100644 --- a/src/Thread_FileAnalyzer.cpp +++ b/src/Thread_FileAnalyzer.cpp @@ -55,6 +55,7 @@ FileAnalyzer::FileAnalyzer(const QStringList &inputFiles) m_filesAccepted = 0; m_filesRejected = 0; m_filesDenied = 0; + m_filesDummyCDDA = 0; } //////////////////////////////////////////////////////////// @@ -68,6 +69,7 @@ void FileAnalyzer::run() m_filesAccepted = 0; m_filesRejected = 0; m_filesDenied = 0; + m_filesDummyCDDA = 0; m_inputFiles.sort(); @@ -113,10 +115,15 @@ const AudioFileModel FileAnalyzer::analyzeFile(const QString &filePath) m_filesDenied++; return audioFile; } - else + + if(checkFile_CDDA(readTest)) { - readTest.close(); + qWarning("Dummy CDDA file detected, skipping!"); + m_filesDummyCDDA ++; + return audioFile; } + + readTest.close(); QProcess process; process.setProcessChannelMode(QProcess::MergedChannels); @@ -359,6 +366,18 @@ unsigned int FileAnalyzer::parseDuration(const QString &str) return 0; } +bool FileAnalyzer::checkFile_CDDA(QFile &file) +{ + file.reset(); + QByteArray data = file.read(128); + + int i = data.indexOf("RIFF"); + int j = data.indexOf("CDDA"); + int k = data.indexOf("fmt "); + + return ((i >= 0) && (j >= 0) && (k >= 0) && (k > j) && (j > i)); +} + //////////////////////////////////////////////////////////// // Public Functions //////////////////////////////////////////////////////////// @@ -370,7 +389,7 @@ unsigned int FileAnalyzer::filesAccepted(void) unsigned int FileAnalyzer::filesRejected(void) { - return m_filesRejected - m_filesDenied; + return max(m_filesRejected - (m_filesDenied + m_filesDummyCDDA), 0); } unsigned int FileAnalyzer::filesDenied(void) @@ -378,6 +397,11 @@ unsigned int FileAnalyzer::filesDenied(void) return m_filesDenied; } +unsigned int FileAnalyzer::filesDummyCDDA(void) +{ + return m_filesDummyCDDA; +} + //////////////////////////////////////////////////////////// // EVENTS //////////////////////////////////////////////////////////// diff --git a/src/Thread_FileAnalyzer.h b/src/Thread_FileAnalyzer.h index 08f57653..13496732 100644 --- a/src/Thread_FileAnalyzer.h +++ b/src/Thread_FileAnalyzer.h @@ -46,6 +46,7 @@ public: unsigned int filesAccepted(void); unsigned int filesRejected(void); unsigned int filesDenied(void); + unsigned int filesDummyCDDA(void); signals: void fileSelected(const QString &fileName); @@ -64,6 +65,7 @@ private: void updateSection(const QString §ion); unsigned int parseYear(const QString &str); unsigned int parseDuration(const QString &str); + bool checkFile_CDDA(QFile &file); QStringList m_inputFiles; const QString m_mediaInfoBin_x86; @@ -72,5 +74,6 @@ private: unsigned int m_filesAccepted; unsigned int m_filesRejected; unsigned int m_filesDenied; + unsigned int m_filesDummyCDDA; bool m_bSuccess; }; -- 2.11.0