diff --git a/doc/Changelog.html b/doc/Changelog.html index 99c10062..ef638e3e 100644 --- a/doc/Changelog.html +++ b/doc/Changelog.html @@ -20,6 +20,7 @@ a:visited { color: #0000EE; }
  • Added support for the QAAC Encoder, requires QuickTime v7.7.1 or newer (see FAQ doc for details)
  • Added Chinese and Taiwanese translations, thanks to 456Vv <123@456vv.com>
  • Added experimental support for dcaenc, created by Alexander E. Patrakov <patrakov@gmail.com> +
  • Added CSV export/import for Meta tags (see context-menu on the "Source Files" tab)
  • Updated Qt runtime libraries to v4.8.0 (2011-12-15), compiled with MSVC 10.0
  • Updated LAME encoder to v3.99.2 Final (2011-11-18), compiled with ICL 12.1.7 and MSVC 10.0 (details)
  • Updated MediaInfo to v0.7.52 (2011-12-19), compiled with ICL 12.1.6 and MSVC 10.0 diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts index 404b776e..85a824d3 100644 --- a/etc/Translation/Blank.ts +++ b/etc/Translation/Blank.ts @@ -677,15 +677,35 @@ FileListModel - + Title - + Full Path + + + (System Default) + + + + + Select ANSI Codepage for CSV file: + + + + + OK + + + + + Cancel + + LogViewDialog @@ -750,7 +770,7 @@ - + Show Details @@ -1412,9 +1432,9 @@ - - - + + + Check for Updates @@ -1455,13 +1475,13 @@ - + Disable Update Reminder - + Disable Sound Effects @@ -1541,710 +1561,802 @@ - + Adding file(s), please wait... - - + + Access Denied - + %1 file(s) have been rejected, because read access was not granted! - + This usually means the file is locked by another process. - + CDDA Files - + %1 file(s) have been rejected, because they are dummy CDDA files! - + Sorry, LameXP cannot extract audio tracks from an Audio-CD at present. - + We recommend using %1 for that purpose. - + Cue Sheet - + %1 file(s) have been rejected, because they appear to be Cue Sheet images! - + Please use LameXP's Cue Sheet wizard for importing Cue Sheet files. - + Files Rejected - + %1 file(s) have been rejected, because the file format could not be recognized! - + This usually means the file is damaged or the file format is not supported. - + Scanning folder(s) for files, please wait... - + DEMO VERSION - + You can drop in audio files here! - + Open File in External Application - + Browse File Location - + Browse Selected Folder - + Bookmark Current Output Folder - + + Export Meta Tags to CSV File + + + + + Import Meta Tags from CSV File + + + + License Declined - + You have declined the license. Consequently the application will exit now! - + Goodbye! - + LameXP - Expired - + This demo (pre-release) version of LameXP has expired at %1. - + LameXP is free software and release versions won't expire. - - + + Exit Program - + It seems that a bogus anti-virus software is slowing down the startup of LameXP. - + Please refer to the %1 document for details and solutions! - + Slow Startup - - - - - - + + + + + + Discard - - + + Don't Show Again - + Urgent Update - + Your version of LameXP is more than a year old. Time for an update! - - + + Ignore - + Skipping update check this time, please be patient... - - - + + + Update Reminder - + Your last update check was more than 14 days ago. Check for updates now? - + Your did not check for LameXP updates yet. Check for updates now? - + Postpone - + LameXP detected that your version of the Nero AAC encoder is outdated! - + The current version available is %1 (or later), but you still have version %2 installed. - + n/a - + You can download the latest version of the Nero AAC encoder from the Nero website at: - + (Hint: Please ignore the name of the downloaded ZIP file and check the included 'changelog.txt' instead!) - + AAC Encoder Outdated - + The Nero AAC encoder could not be found. AAC encoding support will be disabled. - + Please put 'neroAacEnc.exe', 'neroAacDec.exe' and 'neroAacTag.exe' into the LameXP directory! - + Your LameXP directory is located here: - + You can download the Nero AAC encoder for free from the official Nero website at: - + AAC Support Disabled - - - + + + LameXP - + You must add at least one file to the list before proceeding! - + Not Found - + Your currently selected TEMP folder does not exist anymore: - + Restore Default - + Cancel - + There are less than %1 GB of free diskspace available on your system's TEMP folder. - + It is highly recommend to free up more diskspace before proceeding with the encode! - + Your TEMP folder is located at: - + Low Diskspace Warning - + Abort Encoding Process - + Clean Disk Now - + Low Diskspace - + You are proceeding with low diskspace. Problems might occur! - + Sorry, an unsupported encoder has been chosen! - + Cannot write to the selected output directory. - + Please choose a different directory! - + Load Translation - + Translation Files - + Do you really want to disable the update reminder? - - - - - - - + + + + + + + Yes - - - - - - - + + + + + + + No - + The update reminder has been disabled. - + Please remember to check for updates at regular intervals! - + The update reminder has been re-enabled. - + Do you really want to disable all sound effects? - - + + Sound Effects - + All sound effects have been disabled. - + The sound effects have been re-enabled. - - - + + + Nero AAC Notifications - + Do you really want to disable all Nero AAC Encoder notifications? - + All Nero AAC Encoder notifications have been disabled. - + The Nero AAC Encoder notifications have been re-enabled. - - - + + + Slow Startup Notifications - + Do you really want to disable the slow startup notifications? - + The slow startup notifications have been disabled. - + The slow startup notifications have been re-enabled. - - + + Open Cue Sheet - - + + Cue Sheet File - - - + + + Beta Updates - + Do you really want LameXP to check for Beta (pre-release) updates? - + LameXP will check for Beta (pre-release) updates from now on. - + Check Now - + LameXP will <i>not</i> check for Beta (pre-release) updates from now on. - - - + + + Hibernate Computer - + Do you really want the computer to be hibernated on shutdown? - + LameXP will hibernate the computer on shutdown from now on. - + LameXP will <i>not</i> hibernate the computer on shutdown from now on. - - - + + + Shell Integration - + Do you really want to disable the LameXP shell integration? - + The LameXP shell integration has been disabled. - + The LameXP shell integration has been re-enabled. - - + + Add file(s) - - + + Add Folder - - + + + Save CSV file + + + + + + + + CSV File + + + + + + + + CSV Export + + + + + Sorry, there are no meta tags that can be exported! + + + + + Sorry, failed to open CSV file for writing! + + + + + Sorry, failed to write to the CSV file! + + + + + The CSV files was created successfully! + + + + + + Open CSV file + + + + + + + + + CSV Import + + + + + Sorry, failed to open CSV file for reading! + + + + + Sorry, failed to read from the CSV file! + + + + + Sorry, the CSV file does not contain any known fields! + + + + + CSV file is incomplete. Not all files were updated! + + + + + The CSV files was imported successfully! + + + + + New Folder - + Enter the name of the new folder: - + Failed to create folder - + The new folder could not be created: - + Drive is read-only or insufficient access rights! - - - - + + + + Quality Level %1 - - - + + + Compression %1 - - - + + + Uncompressed - + Best Quality (Very Slow) - + High Quality (Recommended) - + Average Quality (Default) - + Low Quality (Fast) - + Poor Quality (Very Fast) - + File name without extension - + Track number with leading zero - + Track title - + Artist name - + Album name - + Year with (at least) four digits - + Comment - + Characters forbidden in file names: - + Rename Macros - + %1 Instance(s) - + Cannot write to the selected directory. Please choose another directory! - + Already Running - + LameXP is already running, please use the running instance! diff --git a/etc/Translation/LameXP_DE.ts b/etc/Translation/LameXP_DE.ts index 123a0fd5..cee679f0 100644 --- a/etc/Translation/LameXP_DE.ts +++ b/etc/Translation/LameXP_DE.ts @@ -536,6 +536,22 @@ Full Path Dateipfad + + (System Default) + (Systemstandard) + + + Select ANSI Codepage for CSV file: + ANSI Codepage für CSV Datei auswählen: + + + OK + OK + + + Cancel + Abbrechen + LogViewDialog @@ -1734,6 +1750,70 @@ DCA Enc + + Export Meta Tags to CSV File + Metatags als CSV-Datei exportieren + + + Import Meta Tags from CSV File + Metatags aus CSV-Datei importieren + + + Save CSV file + CSV-Datei speichern + + + CSV File + CSV Datei + + + CSV Export + CSV Export + + + Sorry, there are no meta tags that can be exported! + Keine Metatags gefunden, die exportiert werden können! + + + Sorry, failed to open CSV file for writing! + Die CSV-Datei konnte nicht zum Schreiben geöffnet werden! + + + Sorry, failed to write to the CSV file! + Beim Schreiben der CSV-Datei ist ein Fehler aufgetreten! + + + The CSV files was created successfully! + Die CSV-Datei wurde erfolgreich erzeugt! + + + Open CSV file + CSV-Datei öffnen + + + Sorry, failed to open CSV file for reading! + Die CSV-Datei konnte nicht zum Lesen geöffnet werden! + + + Sorry, failed to read from the CSV file! + Beim Lesen der CSV-Datei ist ein Fehler aufgetreten! + + + Sorry, the CSV file does not contain any known fields! + Die CSV-Datei enthält keine unterstützten Datenfelder! + + + CSV file is incomplete. Not all files were updated! + Die CSV-Datei ist unvollständig. Nicht alle Dateien wurden aktualisiert! + + + The CSV files was imported successfully! + Die CSV-Datei wurde erfolgreich importiert! + + + CSV Import + CSV Import + MetaInfo diff --git a/etc/Translation/LameXP_ES.ts b/etc/Translation/LameXP_ES.ts index 0a324fcc..d3d1f32b 100644 --- a/etc/Translation/LameXP_ES.ts +++ b/etc/Translation/LameXP_ES.ts @@ -535,6 +535,22 @@ Full Path Ruta completa + + (System Default) + + + + Select ANSI Codepage for CSV file: + + + + OK + Aceptar + + + Cancel + Cancelar + LogViewDialog @@ -1733,6 +1749,70 @@ DCA Enc + + Export Meta Tags to CSV File + + + + Import Meta Tags from CSV File + + + + Save CSV file + + + + CSV File + + + + CSV Export + + + + Sorry, there are no meta tags that can be exported! + + + + Sorry, failed to open CSV file for writing! + + + + Sorry, failed to write to the CSV file! + + + + The CSV files was created successfully! + + + + Open CSV file + + + + Sorry, failed to open CSV file for reading! + + + + Sorry, failed to read from the CSV file! + + + + Sorry, the CSV file does not contain any known fields! + + + + CSV file is incomplete. Not all files were updated! + + + + The CSV files was imported successfully! + + + + CSV Import + + MetaInfo diff --git a/etc/Translation/LameXP_FR.ts b/etc/Translation/LameXP_FR.ts index b0392e5f..11992659 100644 --- a/etc/Translation/LameXP_FR.ts +++ b/etc/Translation/LameXP_FR.ts @@ -539,6 +539,22 @@ Full Path Chemin complet + + (System Default) + + + + Select ANSI Codepage for CSV file: + + + + OK + OK + + + Cancel + Annuler + LogViewDialog @@ -1743,6 +1759,70 @@ Ouvrir le dossier récursivement... DCA Enc + + Export Meta Tags to CSV File + + + + Import Meta Tags from CSV File + + + + Save CSV file + + + + CSV File + + + + CSV Export + + + + Sorry, there are no meta tags that can be exported! + + + + Sorry, failed to open CSV file for writing! + + + + Sorry, failed to write to the CSV file! + + + + The CSV files was created successfully! + + + + Open CSV file + + + + Sorry, failed to open CSV file for reading! + + + + Sorry, failed to read from the CSV file! + + + + Sorry, the CSV file does not contain any known fields! + + + + CSV file is incomplete. Not all files were updated! + + + + The CSV files was imported successfully! + + + + CSV Import + + MetaInfo diff --git a/etc/Translation/LameXP_IT.ts b/etc/Translation/LameXP_IT.ts index aad2d054..e46e9e4e 100644 --- a/etc/Translation/LameXP_IT.ts +++ b/etc/Translation/LameXP_IT.ts @@ -536,6 +536,22 @@ Full Path Percorso + + (System Default) + + + + Select ANSI Codepage for CSV file: + + + + OK + + + + Cancel + Cancella + LogViewDialog @@ -1734,6 +1750,70 @@ DCA Enc + + Export Meta Tags to CSV File + + + + Import Meta Tags from CSV File + + + + Save CSV file + + + + CSV File + + + + CSV Export + + + + Sorry, there are no meta tags that can be exported! + + + + Sorry, failed to open CSV file for writing! + + + + Sorry, failed to write to the CSV file! + + + + The CSV files was created successfully! + + + + Open CSV file + + + + Sorry, failed to open CSV file for reading! + + + + Sorry, failed to read from the CSV file! + + + + Sorry, the CSV file does not contain any known fields! + + + + CSV file is incomplete. Not all files were updated! + + + + The CSV files was imported successfully! + + + + CSV Import + + MetaInfo diff --git a/etc/Translation/LameXP_KR.ts b/etc/Translation/LameXP_KR.ts index e850cd51..d7c08254 100644 --- a/etc/Translation/LameXP_KR.ts +++ b/etc/Translation/LameXP_KR.ts @@ -535,6 +535,22 @@ Full Path 전체 경로 + + (System Default) + + + + Select ANSI Codepage for CSV file: + + + + OK + 확인 + + + Cancel + 취소 + LogViewDialog @@ -1733,6 +1749,70 @@ DCA Enc + + Export Meta Tags to CSV File + + + + Import Meta Tags from CSV File + + + + Save CSV file + + + + CSV File + + + + CSV Export + + + + Sorry, there are no meta tags that can be exported! + + + + Sorry, failed to open CSV file for writing! + + + + Sorry, failed to write to the CSV file! + + + + The CSV files was created successfully! + + + + Open CSV file + + + + Sorry, failed to open CSV file for reading! + + + + Sorry, failed to read from the CSV file! + + + + Sorry, the CSV file does not contain any known fields! + + + + CSV file is incomplete. Not all files were updated! + + + + The CSV files was imported successfully! + + + + CSV Import + + MetaInfo diff --git a/etc/Translation/LameXP_PL.ts b/etc/Translation/LameXP_PL.ts index 50f33207..022b2a21 100644 --- a/etc/Translation/LameXP_PL.ts +++ b/etc/Translation/LameXP_PL.ts @@ -677,15 +677,35 @@ FileListModel - + Title Tytuł - + Full Path Pełna ścieżka + + + (System Default) + (Domyślne systemowe) + + + + Select ANSI Codepage for CSV file: + + + + + OK + OK + + + + Cancel + Anuluj + LogViewDialog @@ -750,7 +770,7 @@ - + Show Details Pokaż szczegóły @@ -1412,9 +1432,9 @@ - - - + + + Check for Updates Sprawdź aktualizacje @@ -1455,13 +1475,13 @@ - + Disable Update Reminder Wyłącz przypominanie o aktualizacji - + Disable Sound Effects Wyłącz efekty dźwiękowe @@ -1541,710 +1561,802 @@ Hibernuj zamiast zamykać - + Adding file(s), please wait... Dodawanie plików, prosze czekać... - - + + Access Denied Dostęp zablokowany - + %1 file(s) have been rejected, because read access was not granted! %1 plik(ów) zostało odrzuconych z powodu braku dostępu do pliku! - + This usually means the file is locked by another process. To przeważnie oznacza, że plik jest zablokowany przez inny proces. - + CDDA Files Pliki CDDA - + %1 file(s) have been rejected, because they are dummy CDDA files! %1 plik(ów) zostało odrzuconych ponieważ to nie są właściwe pliki CDDA! - + Sorry, LameXP cannot extract audio tracks from an Audio-CD at present. LameXP nie może teraz wyekstrachować ścieżki z płyty Audio-CD. - + We recommend using %1 for that purpose. Zaleca się użycie w tym celu %1. - + Cue Sheet Cue Sheet - + %1 file(s) have been rejected, because they appear to be Cue Sheet images! %1 plik(ów) zostało odrzuconych, ponieważ to nie są pliki obrazów Cue Sheet! - + Please use LameXP's Cue Sheet wizard for importing Cue Sheet files. Prosze użyć przewodnika Cue Sheet w LameXP w celu importowania tych plików. - + Files Rejected Pliki odrzucone - + %1 file(s) have been rejected, because the file format could not be recognized! %1 plik(ów) zostało odrzuconych, ponieważ ich format nie został rozpoznany! - + This usually means the file is damaged or the file format is not supported. To przeważnie oznacza że plik jest uszkodzony lub format pliku nie jest wspierany. - + Scanning folder(s) for files, please wait... Skanowanie folderu/ów, prosze czekać... - + You can drop in audio files here! Tutaj możesz upuścić pliki dźwiękowe! - + Open File in External Application Otwórz plik w zewnętrznym programie - + Browse File Location Otwórz lokalizację pliku - + Browse Selected Folder Otwórz wybrany folder - + Bookmark Current Output Folder Zapamiętaj wybrany folder - + License Declined Licencja odrzucona - + You have declined the license. Consequently the application will exit now! Odrzuciłeś licencję. W takim razie program zostanie teraz zamknięty! - + Goodbye! Naraska! - + LameXP - Expired LameXP - Termin wygasł - + This demo (pre-release) version of LameXP has expired at %1. Ta wersja demo (beta) LameXP wygasła %1. - + LameXP is free software and release versions won't expire. LameXP jest darmowym oprogramowaniem i pełna wersja nie wygasa. - - + + Exit Program Wyjdź z programu - + It seems that a bogus anti-virus software is slowing down the startup of LameXP. Najwyraźniej twoje oprogramowanie antywirusowe spowalnia uruchamianie się LameXP. - + Please refer to the %1 document for details and solutions! Prosze sprawdzić dokument %1 w celu dalszych szcegółów i rozwiązań! - + Slow Startup Powolny start - - - - - - + + + + + + Discard Zamknij - - + + Don't Show Again Nie pokazuj ponownie - + Urgent Update Ważna aktualizacja - + Your version of LameXP is more than a year old. Time for an update! Twoja wersja LameXP jest starsza niż rok! Czas na aktualizację! - - - + + + Update Reminder Powiadomienie aktualizacji - + Your last update check was more than 14 days ago. Check for updates now? Ostatnie sprawdzenie aktualizacji było ponad 14 dni temu. Sprawdzić teraz aktualizacje? - + Your did not check for LameXP updates yet. Check for updates now? Nie sprawdzałeś jeszcze aktualizacji LameXP. Sprawdzić teraz aktualizacje? - + Postpone Przełóż - + LameXP detected that your version of the Nero AAC encoder is outdated! LameXP wykrył że Twoja wersja kodera Nero AAC jest nieaktualna! - + The current version available is %1 (or later), but you still have version %2 installed. Wersją dostępną obecnie jest %1, Twoja wersja to %2. - + n/a n/d - + You can download the latest version of the Nero AAC encoder from the Nero website at: Możesz pobrać najnowszą wersję kodera Nero AAC ze strony Nero: - + AAC Encoder Outdated Koder AAC jest nieaktualny - + The Nero AAC encoder could not be found. AAC encoding support will be disabled. Nie można odnaleźć kodera Nero AAC. Kompresja formatu AAC zostanie wyłączona. - + Please put 'neroAacEnc.exe', 'neroAacDec.exe' and 'neroAacTag.exe' into the LameXP directory! Prosze skopiować 'neroAacEnc.exe', 'neroAacDec.exe', oraz 'neroAacTag.exe' do folderu LameXP! - + Your LameXP directory is located here: Folder aplikacji LameXP znajduje się tutaj: - + You can download the Nero AAC encoder for free from the official Nero website at: Możesz pobrać koder Nero AAC za darmo z oficjalnej strony Nero: - + AAC Support Disabled Wsparcie dla AAC wyłączone - - - + + + LameXP LameXP - + You must add at least one file to the list before proceeding! Powinienieś dodać przynajmniej jeden plik do listy aby zacząć działać! - + Not Found Nie znaleziono - + Your currently selected TEMP folder does not exist anymore: Wybrany przez Ciebie folder tymczasowy TEMP już nie istnieje: - + Restore Default Przywróć domyślne - + Cancel Anuluj - + Low Diskspace Warning Ostrzeżenie o małej ilości miejsca na dysku - + There are less than %1 GB of free diskspace available on your system's TEMP folder. Jest mniej niż %1 GB dostępnego miejsca w systemowym folderze TEMP. - + DEMO VERSION WERSJA DEMO - + (Hint: Please ignore the name of the downloaded ZIP file and check the included 'changelog.txt' instead!) (Podpowiedź: Zignoruj nazwę pobranego pliku ZIP, w zamian sprawdż załączony w archiwum plik "changelog.txt"!) - + It is highly recommend to free up more diskspace before proceeding with the encode! Jest wysoce zalecane zwolnić miejsce na dysku zanim zaczniesz kompresję! - + Your TEMP folder is located at: Twój folder TEMP znajduję się: - + Abort Encoding Process Przerwij proces kompresji - + Clean Disk Now Wykonaj oczyszczanie dysku - - + + Ignore Ignoruj - + + Export Meta Tags to CSV File + + + + + Import Meta Tags from CSV File + + + + Skipping update check this time, please be patient... Pomijanie sprawdzania aktualizacji, prosze czekać... - + Low Diskspace Mało miejsca na dysku - + You are proceeding with low diskspace. Problems might occur! Chcesz zacząć działać z małą ilością miejsca na dysku. Mogą wystąpić problemy! - + Sorry, an unsupported encoder has been chosen! Został wybrany koder, który nie jest wspierany! - + Cannot write to the selected output directory. Nie można zapisać do wybranej lokalizacji. - + Please choose a different directory! Prosze wybrać inną lokalizację! - + Load Translation Zaladuj plik językowy - + Translation Files Pliki językowe - + Do you really want to disable the update reminder? Czy na pewno chcesz wyłączyć przypominanie o aktualizacjach? - - - - - - - + + + + + + + Yes Tak - - - - - - - + + + + + + + No Nie - + The update reminder has been disabled. Przypominanie o aktualizacjach wyłączone. - + Please remember to check for updates at regular intervals! Prosze pamiętać o okresowym sprawdzaniu aktualizacji! - + The update reminder has been re-enabled. Przypominanie o aktualizacjach ponownie włączone. - + Do you really want to disable all sound effects? Czy na pewno chcesz wyłączyć wszystkie dźwiękowe? - - + + Sound Effects Efekty dźwiękowe - + All sound effects have been disabled. Wszystkie efekty dźwiękowe zostały wyłączone. - + The sound effects have been re-enabled. Efekty dźwiękowe zostały ponownie włączone. - - - + + + Nero AAC Notifications Powiadomienia Nero AAC - + Do you really want to disable all Nero AAC Encoder notifications? Czy na pewno chcesz wyłączyć wszystkie powiadomienia Nero AAC? - + All Nero AAC Encoder notifications have been disabled. Wszystkie powiadomienia kodera Nero AAC zostały wyłączone. - + The Nero AAC Encoder notifications have been re-enabled. Powiadomienia Nero AAC zostały ponownie włączone. - - - + + + Slow Startup Notifications Powiadomienia o powolnym starcie - + Do you really want to disable the slow startup notifications? Czy na pewno chcesz wyłączyć powiadomienia o powolnym starcie? - + The slow startup notifications have been disabled. Powiadomienia o powolnym starcie zostały wyłączone. - + The slow startup notifications have been re-enabled. Powiadomienia o powolnym starcie zostały ponownie włączone. - - + + Open Cue Sheet Otwórz plik Cue Sheet - - + + Cue Sheet File Plik Cue Sheet - - - + + + Beta Updates Aktualizacje Beta - + Do you really want LameXP to check for Beta (pre-release) updates? Czy na pewno chcesz aby LameXP sprawdzał aktualizacje Beta? - + LameXP will check for Beta (pre-release) updates from now on. Od teraz LameXP będzie sprawdzał aktualizacje Beta. - + Check Now Sprawdź teraz - + LameXP will <i>not</i> check for Beta (pre-release) updates from now on. LameXP od teraz <i>nie będzie</i> sprawdzał aktualizacji Beta. - - - + + + Hibernate Computer Hibernuj komputer - + Do you really want the computer to be hibernated on shutdown? Czy na pewno chcesz aby komputer był hibernowany zamiast zamykany? - + LameXP will hibernate the computer on shutdown from now on. Od teraz LameXP będzie hibernował komputer zamiast zamykać. - + LameXP will <i>not</i> hibernate the computer on shutdown from now on. LameXP od teraz <i>nie</i> będzie hibernował komputera tylko zamykał. - - - + + + Shell Integration Integracja z systemem - + Do you really want to disable the LameXP shell integration? Czy na pewno chcesz wyłączyć integrację LameXP z systemem? - + The LameXP shell integration has been disabled. Integracja LameXP z systemem zostałą wyłączona. - + The LameXP shell integration has been re-enabled. Integracja LameXP z systemem została ponownie włączona. - - + + Add file(s) Dodaj plik(i) - - + + Add Folder Dodaj folder - - + + + Save CSV file + + + + + + + + CSV File + + + + + + + + CSV Export + + + + + Sorry, there are no meta tags that can be exported! + + + + + Sorry, failed to open CSV file for writing! + + + + + Sorry, failed to write to the CSV file! + + + + + The CSV files was created successfully! + + + + + + Open CSV file + + + + + Sorry, failed to open CSV file for reading! + + + + + + + + + CSV Import + + + + + Sorry, failed to read from the CSV file! + + + + + Sorry, the CSV file does not contain any known fields! + + + + + CSV file is incomplete. Not all files were updated! + + + + + The CSV files was imported successfully! + + + + + New Folder Nowy folder - + Enter the name of the new folder: Wprowadź nazwę nowego folderu: - + Failed to create folder Utworzenie folderu zakończone niepowodzeniem - + The new folder could not be created: Nowy folder nie mógł zostać stworzony: - + Drive is read-only or insufficient access rights! Dysk tylko do odczytu lub brak praw dostępu! - - - - + + + + Quality Level %1 Poziom jakości %1 - - - + + + Compression %1 Kompresja %1 - - - + + + Uncompressed Nieskompresowany - + Best Quality (Very Slow) Najlepsza jakość (Bardzo wolno) - + High Quality (Recommended) Wysoka jakość (Zalecane) - + Average Quality (Default) Średnia jakość (Domyślnie) - + Low Quality (Fast) Niska jakość (Szybko) - + Poor Quality (Very Fast) Najniższa jakość (Bardzo szybko) - + File name without extension Nazwa pliku bez rozszerzenia - + Track number with leading zero Numer ścieżki z zerem na początku - + Track title Nazwa ścieżki - + Artist name Nazwa Artysty - + Album name Nazwa Albumu - + Year with (at least) four digits Rok z (przynajmniej) czterema cyframi - + Comment Komentarz - + Characters forbidden in file names: Zabronione znaki w nazwach plików: - + Rename Macros Zmień nazwy makr - + %1 Instance(s) %1 wątek/ki - + Cannot write to the selected directory. Please choose another directory! Nie można zapisać do wybranej lokalizacji. Prosze wybierz inną lokalizację! - + Already Running Już działa - + LameXP is already running, please use the running instance! LameXP już działa, przejdź do działającego programu! diff --git a/etc/Translation/LameXP_RU.ts b/etc/Translation/LameXP_RU.ts index 1a44da5a..e804a09b 100644 --- a/etc/Translation/LameXP_RU.ts +++ b/etc/Translation/LameXP_RU.ts @@ -538,6 +538,22 @@ Full Path Полный путь + + (System Default) + + + + Select ANSI Codepage for CSV file: + + + + OK + ОК + + + Cancel + Отмена + LogViewDialog @@ -1739,6 +1755,70 @@ DCA Enc + + Export Meta Tags to CSV File + + + + Import Meta Tags from CSV File + + + + Save CSV file + + + + CSV File + + + + CSV Export + + + + Sorry, there are no meta tags that can be exported! + + + + Sorry, failed to open CSV file for writing! + + + + Sorry, failed to write to the CSV file! + + + + The CSV files was created successfully! + + + + Open CSV file + + + + Sorry, failed to open CSV file for reading! + + + + Sorry, failed to read from the CSV file! + + + + Sorry, the CSV file does not contain any known fields! + + + + CSV file is incomplete. Not all files were updated! + + + + The CSV files was imported successfully! + + + + CSV Import + + MetaInfo diff --git a/etc/Translation/LameXP_TW.ts b/etc/Translation/LameXP_TW.ts index 8d491415..0784c51c 100644 --- a/etc/Translation/LameXP_TW.ts +++ b/etc/Translation/LameXP_TW.ts @@ -535,6 +535,22 @@ Full Path 完整路徑 + + (System Default) + (系統默認) + + + Select ANSI Codepage for CSV file: + + + + OK + 確定 + + + Cancel + 取消 + LogViewDialog @@ -1733,6 +1749,70 @@ DCA Enc + + Export Meta Tags to CSV File + + + + Import Meta Tags from CSV File + + + + Save CSV file + + + + CSV File + + + + CSV Export + + + + Sorry, there are no meta tags that can be exported! + + + + Sorry, failed to open CSV file for writing! + + + + Sorry, failed to write to the CSV file! + + + + The CSV files was created successfully! + + + + Open CSV file + + + + Sorry, failed to open CSV file for reading! + + + + Sorry, failed to read from the CSV file! + + + + Sorry, the CSV file does not contain any known fields! + + + + CSV file is incomplete. Not all files were updated! + + + + The CSV files was imported successfully! + + + + CSV Import + + MetaInfo diff --git a/etc/Translation/LameXP_UK.ts b/etc/Translation/LameXP_UK.ts index 98ac9d99..abdd2ad1 100644 --- a/etc/Translation/LameXP_UK.ts +++ b/etc/Translation/LameXP_UK.ts @@ -536,6 +536,22 @@ Full Path Повний шлях + + (System Default) + (Типово для ОС) + + + Select ANSI Codepage for CSV file: + + + + OK + Ок + + + Cancel + Відмінити + LogViewDialog @@ -1734,6 +1750,70 @@ DCA Enc DCA Enc + + Export Meta Tags to CSV File + + + + Import Meta Tags from CSV File + + + + Save CSV file + + + + CSV File + + + + CSV Export + + + + Sorry, there are no meta tags that can be exported! + + + + Sorry, failed to open CSV file for writing! + + + + Sorry, failed to write to the CSV file! + + + + The CSV files was created successfully! + + + + Open CSV file + + + + Sorry, failed to open CSV file for reading! + + + + Sorry, failed to read from the CSV file! + + + + Sorry, the CSV file does not contain any known fields! + + + + CSV file is incomplete. Not all files were updated! + + + + The CSV files was imported successfully! + + + + CSV Import + + MetaInfo diff --git a/etc/Translation/LameXP_ZH.ts b/etc/Translation/LameXP_ZH.ts index bb935486..d9f20530 100644 --- a/etc/Translation/LameXP_ZH.ts +++ b/etc/Translation/LameXP_ZH.ts @@ -535,6 +535,22 @@ Full Path 完整路径 + + (System Default) + (系统默认) + + + Select ANSI Codepage for CSV file: + + + + OK + 确定 + + + Cancel + 取消 + LogViewDialog @@ -1733,6 +1749,70 @@ DCA Enc + + Export Meta Tags to CSV File + + + + Import Meta Tags from CSV File + + + + Save CSV file + + + + CSV File + + + + CSV Export + + + + Sorry, there are no meta tags that can be exported! + + + + Sorry, failed to open CSV file for writing! + + + + Sorry, failed to write to the CSV file! + + + + The CSV files was created successfully! + + + + Open CSV file + + + + Sorry, failed to open CSV file for reading! + + + + Sorry, failed to read from the CSV file! + + + + Sorry, the CSV file does not contain any known fields! + + + + CSV file is incomplete. Not all files were updated! + + + + The CSV files was imported successfully! + + + + CSV Import + + MetaInfo diff --git a/res/Icons.qrc b/res/Icons.qrc index 41db7cf5..1574edd9 100644 --- a/res/Icons.qrc +++ b/res/Icons.qrc @@ -59,6 +59,7 @@ icons/folder_image.png icons/folder_explore.png icons/folder_page.png + icons/folder_table.png icons/font.png icons/group.png icons/house.png diff --git a/res/localization/LameXP_DE.qm b/res/localization/LameXP_DE.qm index e82064ed..812fb096 100644 Binary files a/res/localization/LameXP_DE.qm and b/res/localization/LameXP_DE.qm differ diff --git a/res/localization/LameXP_ES.qm b/res/localization/LameXP_ES.qm index a49b90cd..1bce12ea 100644 Binary files a/res/localization/LameXP_ES.qm and b/res/localization/LameXP_ES.qm differ diff --git a/res/localization/LameXP_FR.qm b/res/localization/LameXP_FR.qm index 7ad42a05..3ceff8c9 100644 Binary files a/res/localization/LameXP_FR.qm and b/res/localization/LameXP_FR.qm differ diff --git a/res/localization/LameXP_IT.qm b/res/localization/LameXP_IT.qm index a8491a0a..b9023133 100644 Binary files a/res/localization/LameXP_IT.qm and b/res/localization/LameXP_IT.qm differ diff --git a/res/localization/LameXP_KR.qm b/res/localization/LameXP_KR.qm index e98c8642..c696e742 100644 Binary files a/res/localization/LameXP_KR.qm and b/res/localization/LameXP_KR.qm differ diff --git a/res/localization/LameXP_PL.qm b/res/localization/LameXP_PL.qm index 9042d0e9..c681e96a 100644 Binary files a/res/localization/LameXP_PL.qm and b/res/localization/LameXP_PL.qm differ diff --git a/res/localization/LameXP_RU.qm b/res/localization/LameXP_RU.qm index eb546a72..d774dc53 100644 Binary files a/res/localization/LameXP_RU.qm and b/res/localization/LameXP_RU.qm differ diff --git a/res/localization/LameXP_TW.qm b/res/localization/LameXP_TW.qm index 2a00b429..f24e6c7c 100644 Binary files a/res/localization/LameXP_TW.qm and b/res/localization/LameXP_TW.qm differ diff --git a/res/localization/LameXP_UK.qm b/res/localization/LameXP_UK.qm index aacac040..69fe2e85 100644 Binary files a/res/localization/LameXP_UK.qm and b/res/localization/LameXP_UK.qm differ diff --git a/res/localization/LameXP_ZH.qm b/res/localization/LameXP_ZH.qm index af6bdb6b..ec2a44bb 100644 Binary files a/res/localization/LameXP_ZH.qm and b/res/localization/LameXP_ZH.qm differ diff --git a/src/Config.h b/src/Config.h index 2cdd1172..22ffc381 100644 --- a/src/Config.h +++ b/src/Config.h @@ -30,7 +30,7 @@ #define VER_LAMEXP_MINOR_LO 4 #define VER_LAMEXP_TYPE Alpha #define VER_LAMEXP_PATCH 13 -#define VER_LAMEXP_BUILD 867 +#define VER_LAMEXP_BUILD 870 /////////////////////////////////////////////////////////////////////////////// // Tool versions (minimum expected versions!) diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp index de65afd3..9a042bf3 100644 --- a/src/Dialog_MainWindow.cpp +++ b/src/Dialog_MainWindow.cpp @@ -127,6 +127,7 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S m_findFileContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/folder_go.png"), "N/A"); m_sourceFilesContextMenu->addSeparator(); m_exportCsvContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/table_save.png"), "N/A"); + m_importCsvContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/folder_table.png"), "N/A"); SET_FONT_BOLD(m_showDetailsContextAction, true); connect(buttonAddFiles, SIGNAL(clicked()), this, SLOT(addFilesButtonClicked())); connect(buttonRemoveFile, SIGNAL(clicked()), this, SLOT(removeFileButtonClicked())); @@ -144,6 +145,8 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S connect(m_previewContextAction, SIGNAL(triggered(bool)), this, SLOT(previewContextActionTriggered())); connect(m_findFileContextAction, SIGNAL(triggered(bool)), this, SLOT(findFileContextActionTriggered())); connect(m_exportCsvContextAction, SIGNAL(triggered(bool)), this, SLOT(exportCsvContextActionTriggered())); + connect(m_importCsvContextAction, SIGNAL(triggered(bool)), this, SLOT(importCsvContextActionTriggered())); + //Setup "Output" tab m_fileSystemModel = new QFileSystemModelEx(); @@ -707,6 +710,7 @@ void MainWindow::changeEvent(QEvent *e) m_showFolderContextAction->setText(tr("Browse Selected Folder")); m_addFavoriteFolderAction->setText(tr("Bookmark Current Output Folder")); m_exportCsvContextAction->setText(tr("Export Meta Tags to CSV File")); + m_importCsvContextAction->setText(tr("Import Meta Tags from CSV File")); //Force GUI update m_metaInfoModel->clearData(); @@ -2131,6 +2135,9 @@ void MainWindow::handleDelayedFiles(void) addFiles(selectedFiles); } +/* + * Export Meta tags to CSV file + */ void MainWindow::exportCsvContextActionTriggered(void) { TEMP_HIDE_DROPBOX @@ -2159,18 +2166,76 @@ void MainWindow::exportCsvContextActionTriggered(void) m_settings->mostRecentInputPath(QFileInfo(selectedCsvFile).canonicalPath()); switch(m_fileListModel->exportToCsv(selectedCsvFile)) { - case 1: - QMessageBox::critical(this, tr("CSV Export"), NOBR(tr("There are no meta tags that could be exported!"))); + case FileListModel::CsvError_NoTags: + QMessageBox::critical(this, tr("CSV Export"), NOBR(tr("Sorry, there are no meta tags that can be exported!"))); break; - case 2: + case FileListModel::CsvError_FileOpen: QMessageBox::critical(this, tr("CSV Export"), NOBR(tr("Sorry, failed to open CSV file for writing!"))); break; - case 3: + case FileListModel::CsvError_FileWrite: QMessageBox::critical(this, tr("CSV Export"), NOBR(tr("Sorry, failed to write to the CSV file!"))); break; - default: + case FileListModel::CsvError_OK: QMessageBox::information(this, tr("CSV Export"), NOBR(tr("The CSV files was created successfully!"))); break; + default: + qWarning("exportToCsv: Unknown return code!"); + } + } + ) +} + + +/* + * Import Meta tags from CSV file + */ +void MainWindow::importCsvContextActionTriggered(void) +{ + TEMP_HIDE_DROPBOX + ( + QString selectedCsvFile; + + if(USE_NATIVE_FILE_DIALOG) + { + selectedCsvFile = QFileDialog::getOpenFileName(this, tr("Open CSV file"), m_settings->mostRecentInputPath(), QString("%1 (*.csv)").arg(tr("CSV File"))); + } + else + { + QFileDialog dialog(this, tr("Open CSV file")); + dialog.setFileMode(QFileDialog::ExistingFile); + dialog.setNameFilter(QString("%1 (*.csv)").arg(tr("CSV File"))); + dialog.setDirectory(m_settings->mostRecentInputPath()); + if(dialog.exec()) + { + selectedCsvFile = dialog.selectedFiles().first(); + } + } + + if(!selectedCsvFile.isEmpty()) + { + m_settings->mostRecentInputPath(QFileInfo(selectedCsvFile).canonicalPath()); + switch(m_fileListModel->importFromCsv(this, selectedCsvFile)) + { + case FileListModel::CsvError_FileOpen: + QMessageBox::critical(this, tr("CSV Import"), NOBR(tr("Sorry, failed to open CSV file for reading!"))); + break; + case FileListModel::CsvError_FileRead: + QMessageBox::critical(this, tr("CSV Import"), NOBR(tr("Sorry, failed to read from the CSV file!"))); + break; + case FileListModel::CsvError_NoTags: + QMessageBox::critical(this, tr("CSV Import"), NOBR(tr("Sorry, the CSV file does not contain any known fields!"))); + break; + case FileListModel::CsvError_Incomplete: + QMessageBox::warning(this, tr("CSV Import"), NOBR(tr("CSV file is incomplete. Not all files were updated!"))); + break; + case FileListModel::CsvError_OK: + QMessageBox::information(this, tr("CSV Import"), NOBR(tr("The CSV files was imported successfully!"))); + break; + case FileListModel::CsvError_Aborted: + /* User aborted, ignore! */ + break; + default: + qWarning("exportToCsv: Unknown return code!"); } } ) diff --git a/src/Dialog_MainWindow.h b/src/Dialog_MainWindow.h index 08b67228..a983c9f4 100644 --- a/src/Dialog_MainWindow.h +++ b/src/Dialog_MainWindow.h @@ -90,6 +90,7 @@ private slots: void handleDelayedFiles(void); void hibernateComputerActionTriggered(bool checked); void importCueSheetActionTriggered(bool checked); + void importCsvContextActionTriggered(void); void initOutputFolderModel(void); void languageActionActivated(QAction *action); void languageFromFileActionActivated(bool checked); @@ -185,6 +186,7 @@ private: QAction *m_showFolderContextAction; QAction *m_addFavoriteFolderAction; QAction *m_exportCsvContextAction; + QAction *m_importCsvContextAction; QActionGroup *m_languageActionGroup; QActionGroup *m_styleActionGroup; QActionGroup *m_tabActionGroup; diff --git a/src/Model_FileList.cpp b/src/Model_FileList.cpp index 7ca633ff..f96790e8 100644 --- a/src/Model_FileList.cpp +++ b/src/Model_FileList.cpp @@ -21,9 +21,17 @@ #include "Model_FileList.h" +#include "Global.h" + #include #include #include +#include +#include +#include + +#define EXPAND(STR) QString(STR).leftJustified(96, ' ') +#define CHECK_HDR(STR,NAM) (!(STR).compare((NAM), Qt::CaseInsensitive)) //////////////////////////////////////////////////////////// // Constructor & Destructor @@ -245,12 +253,16 @@ int FileListModel::exportToCsv(const QString &outFile) if(!(haveTitle || haveArtist || haveAlbum || haveGenre || haveYear || haveComment)) { - return 1; + return CsvError_NoTags; } QFile file(outFile); - if(file.open(QIODevice::WriteOnly)) + if(!file.open(QIODevice::WriteOnly)) + { + return CsvError_FileOpen; + } + else { QStringList line; @@ -265,13 +277,9 @@ int FileListModel::exportToCsv(const QString &outFile) if(file.write(line.join(";").append("\r\n").toUtf8().prepend("\xef\xbb\xbf")) < 1) { file.close(); - return 3; + return CsvError_FileWrite; } } - else - { - return 2; - } for(int i = 0; i < nFiles; i++) { @@ -288,10 +296,186 @@ int FileListModel::exportToCsv(const QString &outFile) if(file.write(line.replaceInStrings(";", ",").join(";").append("\r\n").toUtf8()) < 1) { file.close(); - return 3; + return CsvError_FileWrite; } } file.close(); - return 0; + return CsvError_OK; +} + +int FileListModel::importFromCsv(QWidget *parent, const QString &inFile) +{ + QFile file(inFile); + if(!file.open(QIODevice::ReadOnly)) + { + return CsvError_FileOpen; + } + + QTextCodec *codec = NULL; + QByteArray bomCheck = file.peek(16); + + if((!bomCheck.isEmpty()) && bomCheck.startsWith("\xef\xbb\xbf")) + { + codec = QTextCodec::codecForName("UTF-8"); + } + else if((!bomCheck.isEmpty()) && bomCheck.startsWith("\xff\xfe")) + { + codec = QTextCodec::codecForName("UTF-16LE"); + } + else if((!bomCheck.isEmpty()) && bomCheck.startsWith("\xfe\xff")) + { + codec = QTextCodec::codecForName("UTF-16BE"); + } + else + { + const QString systemDefault = tr("(System Default)"); + + QStringList codecList; + codecList.append(systemDefault); + codecList.append(lamexp_available_codepages()); + + QInputDialog *input = new QInputDialog(parent); + input->setLabelText(EXPAND(tr("Select ANSI Codepage for CSV file:"))); + input->setOkButtonText(tr("OK")); + input->setCancelButtonText(tr("Cancel")); + input->setTextEchoMode(QLineEdit::Normal); + input->setComboBoxItems(codecList); + + if(input->exec() < 1) + { + LAMEXP_DELETE(input); + return CsvError_Aborted; + } + + if(input->textValue().compare(systemDefault, Qt::CaseInsensitive)) + { + qDebug("User-selected codec is: %s", input->textValue().toLatin1().constData()); + codec = QTextCodec::codecForName(input->textValue().toLatin1().constData()); + } + else + { + qDebug("Going to use the system's default codec!"); + codec = QTextCodec::codecForName("System"); + } + + LAMEXP_DELETE(input); + } + + bomCheck.clear(); + + //----------------------// + + QTextStream stream(&file); + stream.setAutoDetectUnicode(false); + stream.setCodec(codec); + + QStringList header = stream.readLine().simplified().split(";", QString::KeepEmptyParts); + + const int nCols = header.count(); + const int nFiles = m_fileList.count(); + + if(nCols < 1) + { + return CsvError_FileRead; + } + + for(int i = 0; i < nCols; i++) + { + header[i] = header[i].trimmed(); + } + + bool *ignore = new bool[nCols]; + memset(ignore, 0, sizeof(bool) * nCols); + + //----------------------// + + for(int i = 0; i < nFiles; i++) + { + if(stream.atEnd()) + { + LAMEXP_DELETE_ARRAY(ignore); + return CsvError_Incomplete; + } + + QStringList line = stream.readLine().split(";", QString::KeepEmptyParts); + + if(line.count() < header.count()) + { + qWarning("Skipping an incomplete line in CSV file!"); + continue; + } + + for(int j = 0; j < nCols; j++) + { + if(ignore[j]) + { + continue; + } + else if(CHECK_HDR(header.at(j), "POSITION")) + { + bool ok = false; + unsigned int temp = line.at(j).trimmed().toUInt(&ok); + if(ok) m_fileList[i].setFilePosition(temp); + } + else if(CHECK_HDR(header.at(j), "TITLE")) + { + QString temp = line.at(j).trimmed(); + if(!temp.isEmpty()) m_fileList[i].setFileName(temp); + } + else if(CHECK_HDR(header.at(j), "ARTIST")) + { + QString temp = line.at(j).trimmed(); + if(!temp.isEmpty()) m_fileList[i].setFileArtist(temp); + } + else if(CHECK_HDR(header.at(j), "ALBUM")) + { + QString temp = line.at(j).trimmed(); + if(!temp.isEmpty()) m_fileList[i].setFileAlbum(temp); + } + else if(CHECK_HDR(header.at(j), "GENRE")) + { + QString temp = line.at(j).trimmed(); + if(!temp.isEmpty()) m_fileList[i].setFileGenre(temp); + } + else if(CHECK_HDR(header.at(j), "YEAR")) + { + bool ok = false; + unsigned int temp = line.at(j).trimmed().toUInt(&ok); + if(ok) m_fileList[i].setFileYear(temp); + } + else if(CHECK_HDR(header.at(j), "COMMENT")) + { + QString temp = line.at(j).trimmed(); + if(!temp.isEmpty()) m_fileList[i].setFileComment(temp); + } + else + { + qWarning("Unkonw field '%s' will be ignored!", header.at(j).toUtf8().constData()); + ignore[j] = true; + } + } + + bool noFieldsLeft = true; + + for(int j = 0; j < nCols; j++) + { + if(!ignore[j]) + { + noFieldsLeft = false; + break; + } + } + + if(noFieldsLeft) + { + LAMEXP_DELETE_ARRAY(ignore); + return CsvError_NoTags; + } + } + + //----------------------// + + LAMEXP_DELETE_ARRAY(ignore); + return CsvError_OK; } diff --git a/src/Model_FileList.h b/src/Model_FileList.h index d7ce173e..3df1890b 100644 --- a/src/Model_FileList.h +++ b/src/Model_FileList.h @@ -50,6 +50,20 @@ public: //CSV export/import int exportToCsv(const QString &outFile); + int importFromCsv(QWidget *parent, const QString &inFile); + + //Public types + enum + { + CsvError_OK = 0, + CsvError_NoTags = 1, + CsvError_FileOpen = 2, + CsvError_FileRead = 3, + CsvError_FileWrite = 4, + CsvError_Incomplete = 5, + CsvError_Aborted = 6 + } + CsvError; public slots: void addFile(const QString &filePath);