From b633f40e4ceef4b097d79f341212f92a56c9627d Mon Sep 17 00:00:00 2001 From: lordmulder Date: Sat, 10 Dec 2011 17:06:31 +0100 Subject: [PATCH] If the Cue Sheet isn't clearly UTF-8 (i.e. a BOM is found), then let the user select the desired Codepage. --- etc/Translation/Blank.ts | 124 ++++++++++++++++++++++------------ etc/Translation/LameXP_DE.ts | 32 +++++++++ etc/Translation/LameXP_ES.ts | 32 +++++++++ etc/Translation/LameXP_FR.ts | 32 +++++++++ etc/Translation/LameXP_IT.ts | 32 +++++++++ etc/Translation/LameXP_KR.ts | 32 +++++++++ etc/Translation/LameXP_PL.ts | 124 ++++++++++++++++++++++------------ etc/Translation/LameXP_RU.ts | 32 +++++++++ etc/Translation/LameXP_UK.ts | 32 +++++++++ gui/CueSheetImport.ui | 105 ++++++++++++++++++++++++++++ res/localization/LameXP_DE.qm | Bin 73815 -> 74511 bytes res/localization/LameXP_ES.qm | Bin 74362 -> 74675 bytes res/localization/LameXP_FR.qm | Bin 65436 -> 65638 bytes res/localization/LameXP_IT.qm | Bin 37669 -> 37735 bytes res/localization/LameXP_KR.qm | Bin 44833 -> 44937 bytes res/localization/LameXP_PL.qm | Bin 70149 -> 70436 bytes res/localization/LameXP_RU.qm | Bin 62696 -> 62995 bytes res/localization/LameXP_UK.qm | Bin 75046 -> 75351 bytes src/Config.h | 4 +- src/Dialog_CueImport.cpp | 64 +++++++++++++++++- src/Model_CueSheet.cpp | 36 ++++------ src/Model_CueSheet.h | 5 +- 22 files changed, 575 insertions(+), 111 deletions(-) diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts index 1afe2468..744ace1d 100644 --- a/etc/Translation/Blank.ts +++ b/etc/Translation/Blank.ts @@ -350,153 +350,183 @@ CueImportDialog - + Import Cue Sheet - + The following Cue Sheet will be split and imported into LameXP. - + Loading Cue Sheet file, please be patient... - - + + Failed to load the Cue Sheet file: - + The specified file could not be found! - - - - + + + + Cue Sheet Error - + + (System Default) + + + + + Select ANSI Codepage for Cue Sheet file: + + + + + OK + + + + + Cancel + + + + An unknown error has occured! - + The file could not be opened for reading. Make sure you have the required rights! - + The provided file does not look like a valid Cue Sheet disc image file! - + Could not find any supported audio track in the Cue Sheet image! - + Note that LameXP can not handle "binary" Cue Sheet images. - + The selected Cue Sheet file contains inconsistent information. Take care! - - + + Unknown Artist + + + + + Unknown Album + + + + + Choose Output Directory - - + + LameXP - + Error: The selected output directory could not be created! - + Error: The selected output directory is not writable! - + Low Diskspace Warning - + There are less than %1 GB of free diskspace available in the selected output directory. - + It is highly recommend to free up more diskspace before proceeding with the import! - + Analyzing file(s), please wait... - + Analysis Failed - + Warning: The format of some of the input files could not be determined! - + Continue Anyway - + Abort - + Splitting file(s), please wait... - + Process was aborted by the user after %1 track(s)! - + An unexpected error has occured while splitting the Cue Sheet! - + Imported %1 track(s) from the Cue Sheet and skipped %2 track(s). - + Cue Sheet Completed @@ -505,37 +535,47 @@ CueSheetImport - + Import Cue Sheet - + + Artist: + + + + + Album: + + + + Existing Source File - + Missing Source File (Tracks will be skipped!) - + Output Directory - + Browse... - + Load a different Cue Sheet - + Discard diff --git a/etc/Translation/LameXP_DE.ts b/etc/Translation/LameXP_DE.ts index e39dc321..ba581c37 100644 --- a/etc/Translation/LameXP_DE.ts +++ b/etc/Translation/LameXP_DE.ts @@ -385,6 +385,30 @@ Process was aborted by the user after %1 track(s)! Der Vorgang wurde vom Benutzter nach %1 Track(s) abgebrochen! + + (System Default) + (Systemstandard) + + + Select ANSI Codepage for Cue Sheet file: + ANSI Codepage fürCuesheet Datei auswählen: + + + OK + OK + + + Cancel + Abbrechen + + + Unknown Artist + Unbekannter Künstler + + + Unknown Album + Unbekanntes Album + CueSheetImport @@ -416,6 +440,14 @@ Load a different Cue Sheet Ein anderes Cuesheet laden + + Artist: + Künstler: + + + Album: + Album: + CueSheetModel diff --git a/etc/Translation/LameXP_ES.ts b/etc/Translation/LameXP_ES.ts index 96b84e77..c4d58689 100644 --- a/etc/Translation/LameXP_ES.ts +++ b/etc/Translation/LameXP_ES.ts @@ -385,6 +385,30 @@ Process was aborted by the user after %1 track(s)! ¡El proceso fue cancelado tras %1 pista(s)! + + (System Default) + + + + Select ANSI Codepage for Cue Sheet file: + + + + OK + Aceptar + + + Cancel + Cancelar + + + Unknown Artist + Artista desconocido + + + Unknown Album + Álbum desconocido + CueSheetImport @@ -416,6 +440,14 @@ Load a different Cue Sheet Cargar otro Cue sheet + + Artist: + + + + Album: + + CueSheetModel diff --git a/etc/Translation/LameXP_FR.ts b/etc/Translation/LameXP_FR.ts index dd69e419..2368fdc1 100644 --- a/etc/Translation/LameXP_FR.ts +++ b/etc/Translation/LameXP_FR.ts @@ -389,6 +389,30 @@ Process was aborted by the user after %1 track(s)! + + (System Default) + + + + Select ANSI Codepage for Cue Sheet file: + + + + OK + OK + + + Cancel + Annuler + + + Unknown Artist + Artiste inconnu + + + Unknown Album + + CueSheetImport @@ -420,6 +444,14 @@ Load a different Cue Sheet + + Artist: + + + + Album: + + CueSheetModel diff --git a/etc/Translation/LameXP_IT.ts b/etc/Translation/LameXP_IT.ts index ed698285..dd02275e 100644 --- a/etc/Translation/LameXP_IT.ts +++ b/etc/Translation/LameXP_IT.ts @@ -385,6 +385,30 @@ Process was aborted by the user after %1 track(s)! + + (System Default) + + + + Select ANSI Codepage for Cue Sheet file: + + + + OK + + + + Cancel + Cancella + + + Unknown Artist + + + + Unknown Album + + CueSheetImport @@ -416,6 +440,14 @@ Load a different Cue Sheet + + Artist: + + + + Album: + + CueSheetModel diff --git a/etc/Translation/LameXP_KR.ts b/etc/Translation/LameXP_KR.ts index 96b38026..724e007d 100644 --- a/etc/Translation/LameXP_KR.ts +++ b/etc/Translation/LameXP_KR.ts @@ -385,6 +385,30 @@ Process was aborted by the user after %1 track(s)! + + (System Default) + + + + Select ANSI Codepage for Cue Sheet file: + + + + OK + 확인 + + + Cancel + 취소 + + + Unknown Artist + + + + Unknown Album + + CueSheetImport @@ -416,6 +440,14 @@ Load a different Cue Sheet + + Artist: + + + + Album: + + CueSheetModel diff --git a/etc/Translation/LameXP_PL.ts b/etc/Translation/LameXP_PL.ts index bad301a5..11442c41 100644 --- a/etc/Translation/LameXP_PL.ts +++ b/etc/Translation/LameXP_PL.ts @@ -350,153 +350,183 @@ CueImportDialog - + Import Cue Sheet Importuj Cue Sheet - + The following Cue Sheet will be split and imported into LameXP. Dany plik Cue Sheet będzie podzielony i zaimortowany do LameXP. - + Loading Cue Sheet file, please be patient... Ładowanie pliku Cue Sheet, prosze być cierpliwy... - - + + Failed to load the Cue Sheet file: Ładowanie pliku Cue Sheet zakończone niepowodzeniem: - + The specified file could not be found! Podany plik nie może być odnaleziony! - - - - + + + + Cue Sheet Error Błąd pliku Cue Sheet - + + (System Default) + + + + + Select ANSI Codepage for Cue Sheet file: + + + + + OK + OK + + + + Cancel + Anuluj + + + An unknown error has occured! Wystąpił nieokreśłony błąd! - + The file could not be opened for reading. Make sure you have the required rights! Plik nie mógł zostać odczytany. Upewnij się że masz prawo odczytu! - + The provided file does not look like a valid Cue Sheet disc image file! Dany plik nie wydaje się prawidłowym plikiem obrazu Cue Sheet! - + Could not find any supported audio track in the Cue Sheet image! Nie znaleziono wspieranego formatu dźwięku w żadnej ze ścieżek obrazu Cue Sheet! - + Note that LameXP can not handle "binary" Cue Sheet images. LameXP nie radzi sobie z formatem "binarnym" obrazu Cue Sheet. - + The selected Cue Sheet file contains inconsistent information. Take care! Wybrany plik Cue Sheet zawiera niespójne informacje. Prosze zachować ostrożność! - - + + Unknown Artist + Nieznany Artysta + + + + Unknown Album + Nieznany Album + + + + Choose Output Directory Wybierz folder wyjściowy - - + + LameXP LameXP - + Error: The selected output directory could not be created! Błąd: Wybrana lokalizacja wyjściowa nie może zostać utworzona! - + Error: The selected output directory is not writable! Błąd: Nie można zapisać w wybranej lokalizacji wyjściowej! - + Low Diskspace Warning Ostrzeżenie o małej ilości miejsca na dysku - + There are less than %1 GB of free diskspace available in the selected output directory. Jest mniej niż %1 GB wolnego miejsca w wybranej lokalizacji wyjściowej. - + It is highly recommend to free up more diskspace before proceeding with the import! Jest wysoce zalecane zwolnić miejsce na dysku zanim zaczniesz importować! - + Analyzing file(s), please wait... Analizowanie pliku/ów, prosze czekać... - + Analysis Failed Analiza zakończona niepowodzeniem - + Warning: The format of some of the input files could not be determined! Ostrzeżenie: Nie można rozpoznać formatu kilku plików wejściowych! - + Continue Anyway Kontynuuj pomimo to - + Abort Przerwij - + Splitting file(s), please wait... Dzielenie pliku/ów, prosze czekać... - + Process was aborted by the user after %1 track(s)! Proces został przerwany przez użytkownika po imporcie %1 ścieżek! - + An unexpected error has occured while splitting the Cue Sheet! Wystąpił nieoczekiwany błąd podczas podziału pliku Cue Sheet! - + Imported %1 track(s) from the Cue Sheet and skipped %2 track(s). Zaimportowano %1 ścieżek i opuszczono %2 ścieżek z pliku Cue Sheet. - + Cue Sheet Completed Stworzono plik Cue Sheet @@ -505,37 +535,47 @@ CueSheetImport - + Import Cue Sheet Importuj plik Cue Sheet - + + Artist: + + + + + Album: + + + + Existing Source File Istniejący plik źródłowy - + Missing Source File (Tracks will be skipped!) Brakujące pliki źródłowe (Ścieżki zostaną pominięte!) - + Output Directory Folder wyjściowy - + Browse... Wybierz... - + Load a different Cue Sheet Załaduj inny plik Cue Sheet - + Discard Wyjdź diff --git a/etc/Translation/LameXP_RU.ts b/etc/Translation/LameXP_RU.ts index 67b367a5..f6300efe 100644 --- a/etc/Translation/LameXP_RU.ts +++ b/etc/Translation/LameXP_RU.ts @@ -387,6 +387,30 @@ Process was aborted by the user after %1 track(s)! Процесс отменён пользователем после %1 трэк(ов)! + + (System Default) + + + + Select ANSI Codepage for Cue Sheet file: + + + + OK + ОК + + + Cancel + Отмена + + + Unknown Artist + Неизвестный Артист + + + Unknown Album + Неизвестный Альбом + CueSheetImport @@ -418,6 +442,14 @@ Load a different Cue Sheet Загрузить другой Cue плэйлист + + Artist: + + + + Album: + + CueSheetModel diff --git a/etc/Translation/LameXP_UK.ts b/etc/Translation/LameXP_UK.ts index f50fe493..864dfb4e 100644 --- a/etc/Translation/LameXP_UK.ts +++ b/etc/Translation/LameXP_UK.ts @@ -386,6 +386,30 @@ Cue Sheet Completed Обробку списку Cue завершено + + (System Default) + + + + Select ANSI Codepage for Cue Sheet file: + + + + OK + Ок + + + Cancel + Відмінити + + + Unknown Artist + Невідомий виконавець + + + Unknown Album + Невідомий альбом + CueSheetImport @@ -417,6 +441,14 @@ Load a different Cue Sheet Обрати інший список CUE + + Artist: + + + + Album: + + CueSheetModel diff --git a/gui/CueSheetImport.ui b/gui/CueSheetImport.ui index 69c54837..5273b60e 100644 --- a/gui/CueSheetImport.ui +++ b/gui/CueSheetImport.ui @@ -175,6 +175,111 @@ 2 + + + + + + + 75 + true + + + + Artist: + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 5 + 20 + + + + + + + + N/A + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 16 + 20 + + + + + + + + + 75 + true + + + + Album: + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 5 + 20 + + + + + + + + N/A + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + diff --git a/res/localization/LameXP_DE.qm b/res/localization/LameXP_DE.qm index 65f8db1c013f45d9f47bf0b115c424f13da8828e..e521563723b60d12f647bf0a081cf8403ac04f17 100644 GIT binary patch delta 4892 zcmYjVd0b8T8-C6`=iK$&d)gRBN-9fQD9JM1Bol^6WfYU_TS&$- zBoUf0X^+MhB_cy+GRg9LbN~7M;qyB8-1~mt_j#Uo`BqcFZN15DGtw3S7!6Dh1^D5> zpq@H=Pf2z%kh%z%>IJkPqwkmkquu}kg+Re|V98XV=Utt>Gau~KbYMy`xEycb$1&h8 zaX?I=&faMNS855YaR={8ez#YH_ZbIhQ&YijrY~lV0bdXT^lAlvw+Q(CI{20hV3s}j z_ITjQYAC1w2JA~kpLG;S^E=p$_Xp;*!@k=sAh{pL???qKnsoNX1Gw2-2Fgdly}$wt zT;b7|{4AIS5BoIW&Y5pki`RDF{=+bKn7|VXKL%k!@EV|QKPFDs0Mlk-(v9^%jWecr z{6Pp@#*AXhe(zJvxSbA0z6G-iD6?ai@q>!&ScT3$Ho_0{h5+X$VRnxO`u#=BUU!xf z@q~YdJ}_h&0`eYd0k#MsIfH?!Tr9Hp2P0g=;z(oQEsJH{BY>?c#2OC;-bEszc@&T% z$Cik_z@!{xY%BrBEx;ZVvIhs_Sm7|hJOg=uJ_dd|iCZo7dqoRsCz}BGwG1z#=iCvD z!OlS7%T>ncvepXtp`PjFXaLweW4?>410$Kt*f|9OAuY`4BYl8|LCi#+1?KrO0X{hZ z6UGEi=>j-kW&*Q|3GyAx@-mUM@E^0Si4JIs5|^2WR%U>E5z{*CA{Zu=X$_-5vZqRzzsUAzlyK&DK-X;& z&E#5O)hLNpOuY#Fu~O1Kow!dfm2}S}Zmw5IET_i;^Y2Oe)h`6RG9(U$NxlC$alPlMBxml=z@O(O=Yq^h{k*z?y>p_t~l%C{Yw@N^WW##qnfPY$8aX>!ssgdov`U~*Yg|+BKw&@?%Y9wjm z{A$+L#~(00$=dE80Cdq7vqRQXguZU~* zjJ;x5uRmgd_v6@UAlMUo||#z{W>_G%ncec5Gdg}r&WZ=Ks|1p zwF40Ug&XJSNCC{@CXS@~Uf#g@tp1V2R>y^P^#pc$aZxeJVD!3h@w=74a9eJj*aj@D z;1ai!pC5d>TLO8F7xULKyMXyFguYN(mn3b z9IE@KIoxr73&6*P%a#!WFE()}3fGfn{^j!OT7Y$*xoc+Efy!>&bwddupyF=4Dgn;L za79xofZw)rB_B%xRUTJ1PfNW$wGUT5WglsvnyZu&r`FrK>XZbadKy=ENJDerU#>A< zL8@)$Ue2O}8Xs^in~4He#eMOi=XK${-uon?j^_=%wozl5%^O>-049d>W+&bNorC#a z_kN@P631ICrw+(8^1baiAjO&Qt^MmNkm12weYge84CbvJDY5~zI-6+C_w#*AJ>QhK z>mLH#J;jgwSU~k1!F%o6O*3N&@BN7=@p{esdL#p-;e1HkQ(##OAJ$q&!)yY-q-8X4 z%Z-o8pu|>AC+gw#eA+FlhH<8R zy1^L0v5ZgOcntV!5C5zCDB$x+e$U?o?b-=^)_6eU|duuKK=XsV?JejYkPN7yA%2zt9q#@DF zS3V)gX8*<4XvyK9i}-sdD3FO9|M=Gupsk6ob6HGf7R)!Dpuh`7{>!u_KueTVtjq-d zy)HEuNdt+sQuD!daJ;S5nhOMOM@k1Dn+!zyNu3i(^j6yI(y`lVOjeXi-A#$h${SLT z?B9XMH>8tBTTp%LNoVaMXydL+XC0u<*K4daAeS<(nkNkmNCG1pDqVY`oV0LJnss~t z@ZhQR_!1gcnR}!KE<`~WL3*=CJ#l_gdb>YSe4ti(H~T)#k`vO37NSJ^G*0^PRRmBr zTKdw1A|Jk2X9KTFUk84nve_bS|1X%tvO%UCc@a3ZNT%;Y2ZTn*43(q6@QE@b#Z_uh zt7W~v(C?$a%B*HP0!6Q7)_X`B`8{PedJPo#S=o@+6hM!IvSF8;0M7#12v>&c|B;Ps z=H8{`&|WsDB9a_*kp)kp7Q4Dl7QKa#@J^B~n=+Ti?-kjyWGb&86J^UKYk)H=Wk2~* zVA^G}RfM1;~ z$9gW+{~Ui=PMj^N`h)DWhPb~sSazW;6u8;c(36&)b_CYSz2ezu*Jn>^2@`frt6bfV1fRms2iHKe`Z zzTBZ3`E@gv4YmFCCC5pJK@X7ro^(w`m32D&M0`BXNB{TYe;Y6AgIQjj3nPP4xAynk8(9XL89c&>sJo-H<#oyko2!KIS!HbCQQ)JtMyZV?NA`irZT1ns*&t=+xSqhJ zEae{mE5KqW<-U(p9UoGaM*|K3nz1^YI8%A*{1@P5zB1oElg9Eb<(104Kx=@qNU8y& zP%2BidH|+_l~ph5fZdCfwdTe&Ee(~Ax9uk+B9wpcrs~rAtx~@4M_fE`R&kv?fx(wl zik;Vq`*@ul{!(Yh9@W|Kv8uuOZ-C?Js^MxwS~7R5T>9OhEqS(TYR4A*s#N8FpEMy! zR{6i7z}kALLR7@PPmU_2riwlvr;6DUO_!NQ)v6zCsQ&%BsuDB;L9|)5L!ii&2C838 zY21e7s`fpOpo>F->R@&wjo+cs z-KMIq?nU>5KB|UNe_F|6Rquv-(sbOYdVljEeQ%Dc-HQSX%2BnSTub$zcS}HkIlWK| z>@_>uP8|e=-&rcN<2w7oLFlZdRm#CqXP@5_Iv*KJV|cC5J+q0lu}LuXy9Lw-3OyyH zjqPnh&sTj2$*zJ`dp(J@UT}DRkpfB*+&7aZ0{jGzS%auwgb7}vmLn)O30}jAyU9g@ zmroL9Htw5cRQZBWM^#KbCqzG{i2pRv+0xF!%HlTw*I$V1OImrVCnWYcKirqrG(M)PYp2Feu3_{ROI5PhvZN+{=sUyN{0i+o_q8R0?;slA)6aN|CS z#CIoI2Vh2Dp*TxJ4aHw54O#<6y;gY8;}H#!9>NnV5^Zl$sE=Af{otC=*kQecg|`|C z_{~+}!}?A%gdV6RQCBIT5o&oQeSXAEZDRh8%6+!lJc$rK->TNyyd*VtPgmRCj-aWg zueJ{`An{#NJ8Y|>PFSS&J$#3Dx>og^odj*@Q+434*J&0Qs3W?PqcLCA(Md|$W7WU)AY=~rROh+S0XtIEmpfC2S6tQkMdVO+SAElzGTUgY zF5CA6m~c-0GQx$fUZT4BatZDK3ibPb^qloV{nfr>wlM0iRV!&$%++u^+-bO}HOd-F z)Jz+v(dUz>)3s`P{1gZ*ou;uo9R*;##>U*5E|qsReYF%AZ>;I>M+b+V*VrcB2S)m6 zzIQLAmF6E4%Re1FC{-)G|lQkzzu)R-}V$}oQbAw6m`PN zNKIQ>0$s){;E}H*N8;-_Jv?w92`wF6G z;04l(uQ>fXY9I#_M4$fD2ed;(-&v2S6Lt{;_tNK#i8w#J4{bzm#Rchl1f(b~oKZx7 zCny%fCOc5eO&3=r+mNP?iYv3D2~tIrsGUO`jo&YB8T@`(B@Mn z=ID>2d;e|mLTo1ep`lqU+_aX)?^yB1zMgb^-b}` z(v8IV$Aw_@2e5>ZNy;|EUT3c9M_K5b!5ZFJfoLp62*MGa;vZ(LuV?MOB6?{^xY^i{ zd4VxuOKnn^5yofi>@y`PcJ|#;Ue>8n_z|7Xln?V$q}VogqKEHN2054Zbb=>&bB7sR z5Q$*&xEO($Pu2|c@Ci{VrzaSun7Il=0}(@K#-bhz5JvAK;7GSN>f`j!+B+mHBxtFb zlc%@4nM-7F$l}2HA!hR;qf(}gv^n$DIaHcb=Gi&LsMWe7ij>K%|+%e^pM;8kNOrS_2zGd8Ta@7BQPv#W0bYb*T$1|rqj#T{*@E6WE delta 4577 zcmX9?c|cA17ysOM?|t_z_q|7C#ugIEl0C}Ah*0+ITZs&sFqUjXFJz2C3ZalBOT{bi}}oD@;p8VaBX;8Ov}-GG7( zw1a`jN?@oD@Sy`R!VdUuKH!%QqzwRO4+WassJ0m|Ar6fO1`UOjJPcTL719|AnA^YF zX3l_=(+v1I7jhr^jqrs$(i7Ow0PUlBI_Cg<&W3j@ z`kC?o-Y!u4Dr6o3V334 z#zkOfAVz0JL(tk{>^Ww(-xK4Ev^^uM?cMDd_d`eESOLa2Dq}@GFn+~x;NC6x#?%Db ze}rFZF(6*Sl;jRp;HDdXbn%5?@WxNG>H^Q#V1C1yz}k&iP`5Mi;vK@CcLxqdVBO4J zK>x0YS)C1dyu!|UwDG5LAiXPKAA{8E_kl1MWLEHfeFcgJ*8>U_K~{ME`$fTKt3U9s zmr(nxBQPdNuywQA08Yb%Z$e9eFNH# zE%3dkurSv`4!jp4p3w1=M?&Pq!+^F}h)$>tZ1ND|{@o4iT_z;m4q)Z(RNK-cLgpS~ z-s*m}b+ZvNtzT~}a~86UuOa9|h3u!qwt1qEzx5wrzP)g(0mY}fd2kW1@Uq6TiNCw7(KL)E z)ayrU8paZe3*$7_W+N7m91}IIOQ!=v>@}{n!hzprX!=?H2b`F$@qN$^=69Bgvn&0%S+~zZyxbNw2ysaj2?ML9RQJO<` zgmy=uCVA2tAghPw#AJKEf7q(I)shFUo~J2mHjN}2UTyPhXr6epo%UYRJZnD-n6*{& zre8jwE)aF4uYroiqQyB4_&7_fzqE>&W{D0>X&)^S9o@-+C zTg0FLyPqnq=$Z{gO%c~i&k5;z2QjX8BCxNUxVvaQG5SkPO7F`yydfUSYY#y)S3LEJ zSf$MoGjejtmFMEMI2}niTf8}p8UJoC78axdHB-bY3p4H5MG^w%0%to*^49~_7fagS zti*x6lKGVvFdql=~0$t?AachVMj z9^5uX+Uk|c%4S#FoVHTz`R{-lKTCU(Ry6y_&Cp?s!cak{cGv(%Y z&I4QWWXE@zz{qEE3pWPl>|JfclI7N;UU8D{l{;D6OaZQUk=;L@BbnaHKHIjlO+LuO z{v`xM=ENS+<;*L2^_k+3&Gej<)$8=$a{8qgNjQZad05yt*?(7kTGP zmNw+39M`uQusdGfduA)isgw6*vy?dx#^Q_Ot#nM^9E|Ylm4Ix4b%?o;lOs@svWzHl?|~D(2h;u zq-)w+>vxnH=e^MS`-MZ0&T5w($|L(dv~dTWfuca|!Pyj}?T*@Wy$Hd#s`hfDQeu8s zo7ILG$4}DUNV*LKbk^RiAS8e5wD+FQ1hTJaAA2)!SEp+0=cRq-U&U^*)qZ*(zyu;| zC zhfHGszwE2bk7Ro-wkQiVA;1xh^2-E9wxmjl{Eap)TiLY0fus3?5|tCo1Fg!op@b@b zpt9>iTVQ64vin;e{JDd&SDyilo313cn8ZO-t|W)HqexkmBW7Y>a9TO_ArSa8Sh@NS z6Km5^$!Ob>{a@my+ zSFiji`~R)Z!IqidnxN}4suoABzs|J*9eeK5b^Cr0{poccacMyE7~LS1G?!CD@MSJEh;Zn3=3RsZV_E z3>Y5jQ@y9M4Y%rV1%?Bw;`K#=K0x4jeOWRqV4bFa+=vjR-_yS@*}%=nPXD<-{ivA+ z(Vu~buQ9Z}*O@EVRYRvw{uHGIgS(c2#4WKJdOW#Fy*_FfUCxp^B^bsxTLwheFib=| zP;b9savuZRDbf&7hn0H&$`J5fZ9+7>+U86*%yc@>61y7~_$TtYpTRndemX0L2$z}E zgr|mB&nCbhEetz-{{&`a7~(&&E8a9PB>E))W^3>2Kf+23zn`q42=y_fdByTTAH$#d zyEt$j8m?%~+;%q@a_V~nb{z}_k4hL|rJ=~aF3Gvga6e)v;;SKpaB z-qcw5oG<*k%vgG>DaGWdu`I`zZ2w|>-E9!{zoxPB@*aMuJTiXrVPO7Ujh_xL15W#> z@U!RrC{?`BiA$)fs-JM2WbIgO%g(EHtlXGNC#rS!_h$c>>D7j@Pbix85s`T zz5bsS^nKKkU%SA&yE^wi1I&!Cw%23T#ThREsf`-i%G!hr$X0b#OOm0vxB6=mA9RbT zwz&>!bnP*~x?AeL=opqPRoy@JFfgr5O?vA_5`9)rAPrd4O+8gXb~k9JUb;>~D%1 zX2*?1HpK*GP$WD|F;R3}yU?^1&gT(Pt4M0FN#%^*-*$#8;6=}%Ha$k z#N6l?f2!nNbF(9JK-Doj*|*>VGs@h`%E08h<~9>}@U$N0cB^jlL#5c<#Veg8wSI4Q zyT{Txr^L(F@^MsW*nQEk@^F&`iLk>4< zr8<3UF0$|-{gu)tzEdw`H_w=}NNjElx0OXI*$Zn-Ng_J44ZG3HntvWa!eC6+<{r^uC2mJ#1@ zUhGyaBirP&|CgMxj2c_abvw@Dzl#rqdX}j(T5|JQXqgsWgWrBzEYn9{;RGCN2^#Fm z5!=MFD3XI_b9>9;B>rAM$6}pGh&)?a)^&IR#GJE)PkzM&o?7CX^x_&m#*$pKJ8*cI z<${=XpDlK$H=4ybFEOYu#dx$V}q6rLcdmiD&X7CEuxtCstzgE*TnTOQ3@&3~mV zpANx%LS&8VZOp0FG(}@G$6@0St_@O3U6yN7;$0``H#+soOWD?Ynl>f5zps#D9T-vY Ee{ejGCjbBd diff --git a/res/localization/LameXP_ES.qm b/res/localization/LameXP_ES.qm index 4ab0f05f18a50e1dedfa06305071ae329c508b8e..e80368358b43673806c5edd5faf90b65b05cc771 100644 GIT binary patch delta 4567 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 delta 4498 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 diff --git a/res/localization/LameXP_FR.qm b/res/localization/LameXP_FR.qm index 1a66b3b496a87112403796ca9466c97cb576e9c2..904aeb85a1b68f861618e9285a1864cc30ad13e2 100644 GIT binary patch delta 3999 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 JpuU5%{|_*A%bx%M delta 3925 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 delta 2322 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 delta 3595 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
lYVyGI|flsf7kxX^)+ z-}UeM4`35W1(}_gxA;VYY zr4-|O!}J4mw7Rh&(h@`Ng8ntk@gN0-a}2TbYnWDvhWMT`aCfj_X#cz7;$WW!y`LV za-z)e@9nj~=Lv>){=9wNEor;cK-V-NfiWZWA3I}jCOF>ZfNwLcne+!L}BXw=tg7v&od9DUDb(aLzrH=PH> z8h@|eMlKD;Vl9z)^~_jl;|H`UF<$)hHXV9wta12^lT*0yX7Ub3o@RWunb|Vw2V+A= zLVvE-Bs34;5b9$xY%C(hMONF#5^DY7GstQq=bE~nddiWisj0WQDQCPOlXu6{98Pzb zMtmGTZ^9IOmE5ZfO~Fs;SY5U$+(fQ})|kRCU*z*yrkGW;cvq-4Etud!2R<<+$P$rJ znKnpt{EcYZV#{tAZe!YhGm82DBHWaj^^jtCVaji^2N>|9sW7D)sJdc0FSP{hJxx_M zuDlm)G+lne4-)N7_bz=7Y@BU+(K~>H#za%YnM}SPV|o)vho*Eez1hDAI2b1(#DUGJ zM$#0xb0+*oGE6!`QF>bKwJp*omQKunPp|)epe9iI;AlXi0zFsj) z_G)TiMU>?H<{rhkSMqppoDNh;zAGOw8~h}{@ovof0x3`t82Jn-us5k1-a`ruN@5^e zt@iCtQqV`$4;?1Wx=BY1`h2v^|I>PDe(6&{cqqknu;-w#Us}?BC#T^brKMSX-glYR zmJE5}S^s#FiWbtbdWzU~vUK_?wJ>HOtp_kxEtO`- ztOrF><&;?9{YvS&T`fy~PwAGkh3aglNcX;*$G&Wk9{y)vO3!6_ddDEWOl;1k5oA_> zmrqB^%=&6RPrqkw>F|PiTxE7hBBa^rW|v14T^l!Zm$E1}p-gj+kR}w_E3-%PMPRDY z9J-MRMmUp@R{@RwipWkoA(EWb)gVEeqFnCg>R+r1U@$-ShgSZUM9iF3hvrAR|3M00e0Jz(JfdHHpeSt#@F)PC?#wg*Qz$kv>EN0|Nm=HzD{k#t5&5l zeQYr+TbeR&jSI)`C}n;Y|7bj@SVBp~kWgh+*Qdbx93^SWb8;ss8TQ^x%iT&&q<@9!Y&WdK`@~_m)g1?ok8kzgsC^vHhSZPa?KfhlFJ!XxX z4wc&GP)(z?F6*vG+plXrxcQ+-Pm5ul&-Ld2EgpMUYS+2d^;(zW-(p>CUGM)Mp78T4 F{y#txRL1}S delta 4356 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 delta 3996 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 U!E)E%H3xUQPf#B`<{f_gf5|$o%>V!Z diff --git a/res/localization/LameXP_UK.qm b/res/localization/LameXP_UK.qm index d2b199b1a9d15de0e63e21706341d0f4bdb6985d..46d6d94c3c67766d2cfb129b9eda80db0566fc62 100644 GIT binary patch delta 4636 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 E0AJyiKmY&$ delta 4550 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 diff --git a/src/Config.h b/src/Config.h index ac9fcc07..1f111f93 100644 --- a/src/Config.h +++ b/src/Config.h @@ -29,8 +29,8 @@ #define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_LO 4 #define VER_LAMEXP_TYPE Alpha -#define VER_LAMEXP_PATCH 7 -#define VER_LAMEXP_BUILD 804 +#define VER_LAMEXP_PATCH 8 +#define VER_LAMEXP_BUILD 806 /////////////////////////////////////////////////////////////////////////////// // Tool versions (minimum expected versions!) diff --git a/src/Dialog_CueImport.cpp b/src/Dialog_CueImport.cpp index 930d2c1d..3f205059 100644 --- a/src/Dialog_CueImport.cpp +++ b/src/Dialog_CueImport.cpp @@ -36,8 +36,11 @@ #include #include #include +#include +#include #define SET_FONT_BOLD(WIDGET,BOLD) { QFont _font = WIDGET->font(); _font.setBold(BOLD); WIDGET->setFont(_font); } +#define EXPAND(STR) QString(STR).leftJustified(96, ' ') //////////////////////////////////////////////////////////// // Constructor & Destructor @@ -111,6 +114,63 @@ int CueImportDialog::exec(void) return CueSheetModel::ErrorIOFailure; } + //----------------------// + + QTextCodec *codec = NULL; + + QFile cueFile(cueFileInfo.canonicalFilePath()); + cueFile.open(QIODevice::ReadOnly); + QByteArray bomCheck = cueFile.isOpen() ? cueFile.peek(128) : QByteArray(); + + if((!bomCheck.isEmpty()) && bomCheck.contains("\xef\xbb\xbf")) + { + codec = QTextCodec::codecForName("UTF-8"); + } + else + { + const QString systemDefault = tr("(System Default)"); + + QStringList codecList; codecList << systemDefault; + QList availableCodecs = QTextCodec::availableCodecs(); + while(!availableCodecs.isEmpty()) + { + QByteArray current = availableCodecs.takeFirst(); + if(!(current.startsWith("system") || current.startsWith("System"))) + { + codecList << QString::fromLatin1(current.constData(), current.size()); + } + } + + QInputDialog *input = new QInputDialog(progress); + input->setLabelText(EXPAND(tr("Select ANSI Codepage for Cue Sheet file:"))); + input->setOkButtonText(tr("OK")); + input->setCancelButtonText(tr("Cancel")); + input->setTextEchoMode(QLineEdit::Normal); + input->setComboBoxItems(codecList); + + if(input->exec() > 0) + { + qDebug("User-selected codec is: %s", input->textValue().toLatin1().constData()); + if(input->textValue().compare(systemDefault, Qt::CaseInsensitive)) + { + qDebug("Going to use a user-selected codec!"); + codec = QTextCodec::codecForName(input->textValue().toLatin1().constData()); + } + } + + if(!codec) + { + qDebug("Going to use the system's default codec!"); + codec = QTextCodec::codecForName("System"); + } + + LAMEXP_DELETE(input); + } + + bomCheck.clear(); + + //----------------------// + m_outputDir = QString("%1/%2").arg(cueFileInfo.canonicalPath(), cueFileInfo.completeBaseName()); for(int n = 2; QDir(m_outputDir).exists(); n++) { @@ -119,7 +179,7 @@ int CueImportDialog::exec(void) setWindowTitle(QString("%1: %2").arg(windowTitle().split(":", QString::SkipEmptyParts).first().trimmed(), cueFileInfo.fileName())); - int iResult = m_model->loadCueSheet(m_cueFileName, QApplication::instance()); + int iResult = m_model->loadCueSheet(m_cueFileName, QApplication::instance(), codec); if(iResult != CueSheetModel::ErrorSuccess) { QString errorMsg = tr("An unknown error has occured!"); @@ -156,6 +216,8 @@ void CueImportDialog::modelChanged(void) { treeView->expandAll(); editOutputDir->setText(QDir::toNativeSeparators(m_outputDir)); + labelArtist->setText(m_model->getAlbumPerformer().isEmpty() ? tr("Unknown Artist") : m_model->getAlbumPerformer()); + labelAlbum->setText(m_model->getAlbumTitle().isEmpty() ? tr("Unknown Album") : m_model->getAlbumTitle()); } void CueImportDialog::browseButtonClicked(void) diff --git a/src/Model_CueSheet.cpp b/src/Model_CueSheet.cpp index 97fe50dd..b8385b92 100644 --- a/src/Model_CueSheet.cpp +++ b/src/Model_CueSheet.cpp @@ -527,9 +527,10 @@ unsigned int CueSheetModel::getAlbumYear(void) // Cue Sheet Parser //////////////////////////////////////////////////////////// -int CueSheetModel::loadCueSheet(const QString &cueFileName, QCoreApplication *application) +int CueSheetModel::loadCueSheet(const QString &cueFileName, QCoreApplication *application, QTextCodec *forceCodec) { QMutexLocker lock(&m_mutex); + const QTextCodec *codec = (forceCodec != NULL) ? forceCodec : QTextCodec::codecForName("System"); QFile cueFile(cueFileName); if(!cueFile.open(QIODevice::ReadOnly)) @@ -540,16 +541,17 @@ int CueSheetModel::loadCueSheet(const QString &cueFileName, QCoreApplication *ap clearData(); beginResetModel(); - int iResult = parseCueFile(cueFile, QDir(QFileInfo(cueFile).canonicalPath()), application); + int iResult = parseCueFile(cueFile, QDir(QFileInfo(cueFile).canonicalPath()), application, codec); endResetModel(); return iResult; } -int CueSheetModel::parseCueFile(QFile &cueFile, const QDir &baseDir, QCoreApplication *application) +int CueSheetModel::parseCueFile(QFile &cueFile, const QDir &baseDir, QCoreApplication *application, const QTextCodec *codec) { cueFile.seek(0); qDebug("\n[Cue Sheet Import]"); + bool bForceLatin1 = false; //Reject very large files, as parsing might take until forever if(cueFile.size() >= 10485760i64) @@ -558,28 +560,18 @@ int CueSheetModel::parseCueFile(QFile &cueFile, const QDir &baseDir, QCoreApplic return 2; } - //Get system local Codec - const QTextCodec *codec = QTextCodec::codecForName("System"); - - //Check for UTF-8 BOM in order to guess encoding - bool bUTF8 = false, bForceLatin1 = false; - QByteArray bomCheck = cueFile.peek(128); - bUTF8 = (!bomCheck.isEmpty()) && bomCheck.contains("\xef\xbb\xbf"); - qDebug("Encoding is %s.", (bUTF8 ? "UTF-8" : "Local 8-Bit")); - bomCheck.clear(); - //Test selected Codepage for decoding errors - if(!bUTF8) + qDebug("Character encoding is: %s.", codec->name().constData()); + const QString replacementSymbol = QString(QChar(QChar::ReplacementCharacter)); + QByteArray testData = cueFile.peek(1048576); + if((!testData.isEmpty()) && codec->toUnicode(testData.constData(), testData.size()).contains(replacementSymbol)) { - const QString replacementSymbol = QString(QChar(QChar::ReplacementCharacter)); - QByteArray data = cueFile.peek(1048576); - if((!data.isEmpty()) && codec->toUnicode(data.constData(), data.size()).contains(replacementSymbol)) - { - qWarning("Decoding error using local 8-Bit codepage. Enforcing Latin-1."); - bForceLatin1 = true; - } + qWarning("Decoding error using local codepage. Enforcing Latin-1."); + bForceLatin1 = true; } + testData.clear(); + //Create regular expressions QRegExp rxFile("^FILE\\s+(\"[^\"]+\"|\\S+)\\s+(\\w+)$", Qt::CaseInsensitive); QRegExp rxTrack("^TRACK\\s+(\\d+)\\s(\\w+)$", Qt::CaseInsensitive); QRegExp rxIndex("^INDEX\\s+(\\d+)\\s+([0-9:]+)$", Qt::CaseInsensitive); @@ -615,7 +607,7 @@ int CueSheetModel::parseCueFile(QFile &cueFile, const QDir &baseDir, QCoreApplic break; } - QString line = (bUTF8 ? QString::fromUtf8(lineData.constData(), lineData.size()) : (bForceLatin1 ? QString::fromLatin1(lineData.constData(), lineData.size()) : codec->toUnicode(lineData.constData(), lineData.size()))).trimmed(); + QString line = (bForceLatin1 ? QString::fromLatin1(lineData.constData(), lineData.size()) : codec->toUnicode(lineData.constData(), lineData.size())).trimmed(); /* --- FILE --- */ if(rxFile.indexIn(line) >= 0) diff --git a/src/Model_CueSheet.h b/src/Model_CueSheet.h index 8def56cd..dc50d9c0 100644 --- a/src/Model_CueSheet.h +++ b/src/Model_CueSheet.h @@ -28,6 +28,7 @@ class CueSheetFile; class QApplication; class QDir; +class QTextCodec; class CueSheetModel : public QAbstractItemModel { @@ -73,10 +74,10 @@ public: unsigned int getAlbumYear(void); //Cue Sheet functions - int loadCueSheet(const QString &cueFile, QCoreApplication *application = NULL); + int loadCueSheet(const QString &cueFile, QCoreApplication *application = NULL, QTextCodec *forceCodec= NULL); private: - int parseCueFile(QFile &cueFile, const QDir &baseDir, QCoreApplication *application); + int parseCueFile(QFile &cueFile, const QDir &baseDir, QCoreApplication *application, const QTextCodec *codec); double parseTimeIndex(const QString &index); QString indexToString(const double index) const;