diff --git a/doc/Changelog.html b/doc/Changelog.html
index f4e6c9ee..d5561f2e 100644
--- a/doc/Changelog.html
+++ b/doc/Changelog.html
@@ -21,6 +21,7 @@ a:visited { color: #0000EE; }
Improved internal encoder API, so each encoder can define its own configuration options
Complete overhaul of the file analyzer, resulting in up to 2.5x faster file import speed
Updated mpg123 decoder to v1.16.0 (2013-10-06), compiled with GCC 4.8.1
+Various bugfixes and code improvements
Changes between v4.07 and v4.08 [2013-09-04]:
diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts
index 578612fb..17d90360 100644
--- a/etc/Translation/Blank.ts
+++ b/etc/Translation/Blank.ts
@@ -379,56 +379,56 @@
AudioFileModel
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
@@ -685,44 +685,44 @@
CueSheetModel
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
@@ -789,22 +789,22 @@
-
+
-
+
-
+
-
+
@@ -1755,7 +1755,7 @@
-
+
@@ -1943,7 +1943,7 @@
-
+
@@ -2434,155 +2434,155 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2671,204 +2671,206 @@
MetaInfoModel
-
-
+
+
+
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
@@ -2881,138 +2883,138 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3123,100 +3125,100 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
diff --git a/etc/Translation/LameXP_EN.ts b/etc/Translation/LameXP_EN.ts
index 51c988d5..8799117a 100644
--- a/etc/Translation/LameXP_EN.ts
+++ b/etc/Translation/LameXP_EN.ts
@@ -63,7 +63,7 @@
-
+
%n Instance
@@ -74,7 +74,7 @@
ProcessingDialog
-
+
Encoding: %n file of %1 completed so far, please wait...
@@ -82,7 +82,7 @@
-
+
Process was aborted by the user after %n file!
@@ -90,7 +90,7 @@
-
+
Error: %1 of %n file failed (%2). Double-click failed items for detailed information!
@@ -98,7 +98,7 @@
-
+
%n file skipped
@@ -106,7 +106,7 @@
-
+
Error: %1 of %n file failed. Double-click failed items for detailed information!
@@ -114,7 +114,7 @@
-
+
All files completed successfully. Skipped %n file.
diff --git a/etc/Translation/LameXP_PL.ts b/etc/Translation/LameXP_PL.ts
index c1dcca51..fc1b0287 100644
--- a/etc/Translation/LameXP_PL.ts
+++ b/etc/Translation/LameXP_PL.ts
@@ -379,56 +379,56 @@
AudioFileModel
-
-
+
+
Profil
-
+
Kanały
-
+
Częstotliwość
-
-
+
+
Głębia bitów
-
+
Typ
-
+
Wersja
-
-
-
+
+
+
Przepływność bitów
-
+
Stały
-
+
Zmienny
-
+
Enkoder
@@ -691,44 +691,44 @@
CueSheetModel
-
+
Numer.
-
+
Plik/ŚcieżKa
-
+
Indeks
-
+
Czas trwania
-
+
Plik %1
-
+
Ścieżka %1
-
-
+
+
Nieznany Artysta
-
-
+
+
Nieznany Tytuł
@@ -795,22 +795,22 @@
Pełna ścieżka
-
+
(Domyślne systemowe)
-
+
Wybierz zestaw znaków ANSI dla pliku CVS:
-
+
OK
-
+
Anuluj
@@ -1762,7 +1762,7 @@
-
+
Dostęp zablokowany
@@ -1892,7 +1892,7 @@
-
+
Zamknij
@@ -2449,118 +2449,118 @@
-
+
Nowy folder
-
+
Wprowadź nazwę nowego folderu:
-
+
Utworzenie folderu zakończone niepowodzeniem
-
+
Nowy folder nie mógł zostać stworzony:
-
+
Dysk tylko do odczytu lub brak praw dostępu!
-
-
+
+
Poziom jakości %1
-
+
Kompresja %1
-
+
Nieskompresowany
-
+
Najlepsza jakość (Powoli)
-
+
Akceptowalna jakość (Szybko)
-
+
Wysoka jakość (Zalecane)
-
+
-
+
Najniższa jakość (Bardzo szybko)
-
+
Nazwa pliku bez rozszerzenia
-
+
Numer ścieżki z zerem na początku
-
+
Nazwa ścieżki
-
+
Nazwa Artysty
-
+
Nazwa Albumu
-
+
Rok z (przynajmniej) czterema cyframi
-
+
Komentarz
-
+
Zabronione znaki w nazwach plików:
-
+
Zmień nazwy makr
-
+
%n wątek
@@ -2569,37 +2569,37 @@
-
+
Nie można zapisać do wybranej lokalizacji. Prosze wybierz inną lokalizację!
-
+
Tryb nadpisywania
-
+
Ostrzeżenie: W tym trybie istniejące pliki będą nadpisywane bez możliwości ich odzyskania!
-
+
Kontynuuj
-
+
Cofnij
-
+
Już działa
-
+
LameXP już działa, przejdź do działającego procesu!
@@ -2688,204 +2688,206 @@
MetaInfoModel
-
-
+
+
+
Nieznany
-
-
+
+
+
Nie określony
-
+
Pełna ścieżka
-
+
Format
-
+
Kontener
-
+
Kompresja
-
+
Czas trwania
-
+
Tytuł
-
+
Artysta
-
+
Album
-
+
Rodzaj
-
+
Rok
-
+
Pozycja
-
-
+
+
Pozycja z listy
-
+
Komentarz
-
+
Pole
-
+
Wartość
-
+
Nieokreślony
-
+
OK
-
+
Anuluj
-
-
+
+
Edytuj Tytuł
-
+
Wprowadź Tytuł dla tego pliku:
-
+
Tytuł musi zawierać znaki. Tytuł zostanie wygenerowany z nazwy pliku!
-
+
Edytuj Artystę
-
+
Wprowadź Artystę dla tego pliku:
-
+
Edytuj Album
-
+
Wprowadź Album dla tego pliku:
-
+
Edytuj Rodzaj
-
+
Wprowadź Rodzaj dla tego pliku:
-
+
Edyuj Rok
-
+
Wprowadź Rok dla tego pliku:
-
-
+
+
Edytuj Pozycję
-
-
+
+
Wprowadź Pozycję (nr ścieżki) dla tego pliku:
-
+
Nieokreślony (kopiuj z pliku źródłowego)
-
+
Edytuj Komentarz
-
+
Wprowadź Komentarz dla tego pliku:
-
-
+
+
Encoded with LameXP
-
+
Nie edytowalne
-
+
Nie da się wyedytować tej właściwości pliku!
@@ -2898,138 +2900,138 @@
Rozpoczynanie...
-
+
Pominięto.
-
+
Nie znaleziono!
-
+
UWAGA: Plik po zdekodowaniu przekracza 4 GB, mogą wystąpić problemy!
-
+
Format tego pliku NIE jest obsługiwany:
-
+
Format kontenera:
-
+
Format dźwięku:
-
+
Nieobsługiwany!
-
+
Zrobione.
-
+
Przerwano!
-
+
Niepowodzenie!
-
+
Kompresowanie
-
+
Analizowanie
-
+
Filtrowanie
-
+
Dekodowanie
-
+
Źródłowy plik dźwiękowy nie został odnaleziony:
-
+
Źródłowy plik dźwiękowy nie mógł zostać otworzony:
-
+
Lokalizacja docelowa nie istnieje lu NIE mogła zostać utworzona:
-
+
Nie można zapisać do lokalizacji docelowej:
-
+
Nieznana nazwa pliku
-
+
Nieznany Tytuł
-
+
Nieznany Artysta
-
+
Nieznany Album
-
+
Nieznany Komentarz
-
+
Plik wynikowy już istnieje, zostanie pominięty plik:
-
+
Jeśli nie chcesz aby istniejące pliki były pomijane, zmień tryb nadpisywania!
-
+
Plik wynikowy już istnieje, zostanie usunięty plik:
-
+
Usuwanie istniejącego pliku zakończone niepowodzeniem, nowy plik zostanie zapisany pod inną nazwą!
@@ -3140,12 +3142,12 @@
Wielowątkowosć włączona: Równolegle wykonywanych jest %1 kodowań!
-
+
Przerwano! Czekanie na wyłączenie procesu...
-
+
Kompresowanie: %n plik z %1 został do tej pory zakończony, prosze czekać...
@@ -3154,17 +3156,17 @@
-
+
Tworzenie pliku playlisty, prosze czekać...
-
+
Proces został przedwcześnie zakończony przez użytkownika!
-
+
Proces został zakończony przez użytkownika po zakończeniu %n pliku!
@@ -3173,22 +3175,22 @@
-
+
LameXP - Przerwano
-
+
Proces został przerwany przez użytkownika.
-
+
Proces został zakończony po %1.
-
+
Błąd: %1 z %n pliku zakończono niepowodzeniem (%2). Kliknij dwukrotnie aby uzyskać więcej informacji!
@@ -3197,7 +3199,7 @@
-
+
pominięto %n plik
@@ -3206,7 +3208,7 @@
-
+
Błąd: %1 z %n pliku zakończono niepowodzeniem. Kliknij dwukrotnie aby uzyskać więcej informacji!
@@ -3215,7 +3217,7 @@
-
+
Wszystkie zadania wykonano pomyślnie. Pominięto %n plik.
@@ -3224,28 +3226,28 @@
-
+
LameXP - Błąd
-
+
Przynajmniej jeden plik nie został skompresowany!
-
-
+
+
Kompresja wszystkich plików zakończona powodzeniem.
-
+
LameXP - Zrobione
-
+
Żadna z pozycji nie spełnia reguł filtra
diff --git a/etc/Translation/LameXP_SV.ts b/etc/Translation/LameXP_SV.ts
index 1e7b6896..49be0ff1 100644
--- a/etc/Translation/LameXP_SV.ts
+++ b/etc/Translation/LameXP_SV.ts
@@ -379,56 +379,56 @@
AudioFileModel
-
-
+
+
Profil
-
+
Kanaler
-
+
Samplingsfrekvens
-
-
+
+
Bitdjup
-
+
Typ
-
+
Version
-
-
-
+
+
+
Bithastighet
-
+
Konstant
-
+
Variabel
-
+
Kodare
@@ -689,44 +689,44 @@
CueSheetModel
-
+
Nr.
-
+
Fil / Spår
-
+
Index
-
+
Varaktighet
-
+
Fil %1
-
+
Spår %1
-
-
+
+
Okänd artist
-
-
+
+
Okänd titel
@@ -793,22 +793,22 @@
Sökväg
-
+
(Systemstandard)
-
+
Välj ANSI som teckentabell för CSV-fil:
-
+
OK
-
+
Avbryt
@@ -1759,7 +1759,7 @@
-
+
Åtkomst nekad
@@ -1951,7 +1951,7 @@
-
+
Stäng
@@ -2442,118 +2442,118 @@
-
+
Ny mapp
-
+
Namn på den nya mappen:
-
+
Kunde inte skapa någon mapp
-
+
Den nya mappen kunde inte skapas:
-
+
Diskenheten är skrivskyddad eller åtkomsträttigheter saknas!
-
-
+
+
Kvallitetsnivå %1
-
+
Kompression %1
-
+
Okomprimerad
-
+
Bäst kvalitet (Långsam)
-
+
Acceptabel kvalitet (Snabb)
-
+
Hög kvallitet (rekommenderas)
-
+
-
+
Dålig kvallitet (mycket snabb)
-
+
Filnamn utan filtillägg
-
+
Spårnummer med inledande nolla
-
+
Spårtitel
-
+
Artistnamn
-
+
Albumnamn
-
+
Årtal med (minst) fyra siffror
-
+
Kommentar
-
+
Förbjudna tecken i filnamn:
-
+
Namnändra macron
-
+
%n instans
@@ -2561,37 +2561,37 @@
-
+
Kan inte skriva till den specificerade mappen. Välj en annan destination!
-
+
Överskrivningsläge
-
+
Varning! Det här läget kan skriva över befintliga filer, utan möjlighet att återskapa!
-
+
Fortsätt
-
+
Återställ
-
+
Körs redan
-
+
LameXP körs redan, använd den redan startade instansen!
@@ -2680,204 +2680,206 @@
MetaInfoModel
-
-
+
+
+
Okänd
-
-
+
+
+
Ej specificerad
-
+
Sökväg
-
+
Format
-
+
Behållare
-
+
Kompression
-
+
Varaktighet
-
+
Titel
-
+
Artist
-
+
Album
-
+
Genre
-
+
Årtal
-
+
Spårnummer
-
-
+
+
Generera från listposition
-
+
Kommentar
-
+
Egenskap
-
+
Värde
-
+
Ospecificerad
-
+
OK
-
+
Avbryt
-
-
+
+
Redigera titel
-
+
Ange titel:
-
+
Titelfältet kan inte vara tomt. Genererar titel från filnamn!
-
+
Redigera artist
-
+
Ange artistnamn:
-
+
Redigera album
-
+
Ange albumnamn:
-
+
Redigera genre
-
+
Ange genre:
-
+
Redigera årtal
-
+
Ange årtal:
-
-
+
+
Redigera spårnummer
-
-
+
+
Ange spårnummer:
-
+
Ospecificerat (kopiera från källfilen)
-
+
Redigera kommentar
-
+
Ange kommentar:
-
-
+
+
Kodad med LameXP
-
+
Ej redigerbar
-
+
Denna egenskap från källfilen kan inte redigeras!
@@ -2890,139 +2892,139 @@
Startar...
-
+
Överhoppad.
-
+
Hittas ej!
-
+
VARNING! Omkodad filstorlek överstiger 4 GB. Problem kan uppstå!
-
+
Det här filformatet saknar stöd i LameXP:
-
+
Behållarformat:
-
+
Ljudformat:
-
+
Stöd saknas!
-
+
Avbruten!
-
+
Klar.
-
+
Misslyckades!
-
+
Kodar
-
+
Analyserar
-
+
Filtrerar
-
+
Avkodar
-
+
Källfilen kan inte hittas:
-
+
Källfilen kan inte öppnas för läsning:
-
+
Målmappen finns inte och kan inte skapas:
-
+
Målmappen är INTE skrivbar:
-
+
Okänt filnamn
-
+
Okänd titel
-
+
Okänd artist
-
+
Okänt album
-
+
Okänd kommentar
-
+
Målfilen finns redan! Den här filen hoppas över:
-
+
Om du inte vill att befintliga filer hoppas över, måste du ändra överskrivningsläge!
-
+
Målfilen finns redan! Befintlig fil kommer att tas bort:
-
+
Kunde inte ta bort befintlig målfil. Sparar med annat filnamn!
@@ -3133,12 +3135,12 @@
Flertrådskörning aktiverad: Kör %1 parallella instanser!
-
+
Avbrutet! Väntar på att aktiva processer skall avslutas...
-
+
Kodar! %n fil av%1 slutförd. vänta...
@@ -3146,17 +3148,17 @@
-
+
Skapar spelningslista, vänta...
-
+
Åtgärden avbröts i förtid av användaren!
-
+
Åtgärden avbröts av användaren efter %n fil!
@@ -3164,22 +3166,22 @@
-
+
LameXP - Avbrutet
-
+
Åtgärden avbröts av användaren.
-
+
Åtgärden slutförd efter %1.
-
+
Fel! %1 av %n filer misslyckades (%2). Dubbelklicka på misslyckat objekt för info!
@@ -3187,7 +3189,7 @@
-
+
%n fil hoppades över
@@ -3195,7 +3197,7 @@
-
+
Fel! %1 av %n filer misslyckades. Dubbelklicka på misslyckat objekt för info!
@@ -3203,7 +3205,7 @@
-
+
Alla filer korrekt slutförda. %n fil hoppades över.
@@ -3211,28 +3213,28 @@
-
+
LameXP - Fel
-
+
Minst en fil har misslyckats!
-
-
+
+
Alla filer korrekt omkodade.
-
+
LameXP - Klar
-
+
Inga objekt matchar aktuell filtrering
diff --git a/src/Config.h b/src/Config.h
index 843248aa..2f1039df 100644
--- a/src/Config.h
+++ b/src/Config.h
@@ -34,7 +34,7 @@
#define VER_LAMEXP_MINOR_LO 9
#define VER_LAMEXP_TYPE Alpha
#define VER_LAMEXP_PATCH 2
-#define VER_LAMEXP_BUILD 1380
+#define VER_LAMEXP_BUILD 1382
#define VER_LAMEXP_CONFG 1348
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp
index de4f9d02..f058ffe9 100644
--- a/src/Dialog_MainWindow.cpp
+++ b/src/Dialog_MainWindow.cpp
@@ -167,7 +167,7 @@ static const unsigned int IDM_ABOUTBOX = 0xEFF0;
// Constructor
////////////////////////////////////////////////////////////
-MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, SettingsModel *settingsModel, QWidget *parent)
+MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel_MetaInfo *metaInfo, SettingsModel *settingsModel, QWidget *parent)
:
QMainWindow(parent),
ui(new Ui::MainWindow),
@@ -313,7 +313,7 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
// Setup "Meta Data" tab
//--------------------------------
- m_metaInfoModel = new MetaInfoModel(m_metaData, 6);
+ m_metaInfoModel = new MetaInfoModel(m_metaData);
m_metaInfoModel->clearData();
m_metaInfoModel->setData(m_metaInfoModel->index(4, 1), m_settings->metaInfoPosition());
ui->metaDataView->setModel(m_metaInfoModel);
@@ -2705,26 +2705,24 @@ void MainWindow::makeFolderButtonClicked(void)
QDir basePath(m_fileSystemModel->fileInfo(ui->outputFolderView->currentIndex()).absoluteFilePath());
QString suggestedName = tr("New Folder");
- const AudioFileModel_MetaInfo &metaInfo = m_metaData->metaInfo();
-
- if(!metaInfo.artist().isEmpty() && !metaInfo.album().isEmpty())
+ if(!m_metaData->artist().isEmpty() && !m_metaData->album().isEmpty())
{
- suggestedName = QString("%1 - %2").arg(metaInfo.artist(), metaInfo.album());
+ suggestedName = QString("%1 - %2").arg(m_metaData->artist(),m_metaData->album());
}
- else if(!metaInfo.artist().isEmpty())
+ else if(!m_metaData->artist().isEmpty())
{
- suggestedName = metaInfo.artist();
+ suggestedName = m_metaData->artist();
}
- else if(!metaInfo.album().isEmpty())
+ else if(!m_metaData->album().isEmpty())
{
- suggestedName = metaInfo.album();
+ suggestedName =m_metaData->album();
}
else
{
for(int i = 0; i < m_fileListModel->rowCount(); i++)
{
const AudioFileModel &audioFile = m_fileListModel->getFile(m_fileListModel->index(i, 0));
- const AudioFileModel_MetaInfo &fileMetaInfo = m_metaData->metaInfo();
+ const AudioFileModel_MetaInfo &fileMetaInfo = audioFile.metaInfo();
if(!fileMetaInfo.album().isEmpty() || !fileMetaInfo.artist().isEmpty())
{
@@ -3191,7 +3189,7 @@ void MainWindow::editMetaButtonClicked(void)
if(index.row() == 4)
{
- m_settings->metaInfoPosition(m_metaData->metaInfo().position());
+ m_settings->metaInfoPosition(m_metaData->position());
}
}
}
diff --git a/src/Dialog_MainWindow.h b/src/Dialog_MainWindow.h
index e6b86bc6..30d1e203 100644
--- a/src/Dialog_MainWindow.h
+++ b/src/Dialog_MainWindow.h
@@ -26,6 +26,7 @@
//Class declarations
class AbstractEncoder;
class AudioFileModel;
+class AudioFileModel_MetaInfo;
class CustomEventFilter;
class DropBox;
class FileListModel;
@@ -51,7 +52,7 @@ class MainWindow: public QMainWindow
Q_OBJECT
public:
- MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, SettingsModel *settingsModel, QWidget *parent = 0);
+ MainWindow(FileListModel *fileListModel, AudioFileModel_MetaInfo *metaInfo, SettingsModel *settingsModel, QWidget *parent = 0);
~MainWindow(void);
bool isAccepted() { return m_accepted; }
@@ -200,7 +201,7 @@ private:
FileListModel *m_fileListModel;
QFileSystemModelEx *m_fileSystemModel;
MessageHandlerThread *m_messageHandler;
- AudioFileModel *m_metaData;
+ AudioFileModel_MetaInfo *const m_metaData;
MetaInfoModel *m_metaInfoModel;
QMenu *m_outputFolderContextMenu;
SettingsModel *m_settings;
diff --git a/src/Dialog_Processing.cpp b/src/Dialog_Processing.cpp
index 12d31dd3..22c6d968 100644
--- a/src/Dialog_Processing.cpp
+++ b/src/Dialog_Processing.cpp
@@ -131,7 +131,7 @@ private:
// Constructor
////////////////////////////////////////////////////////////
-ProcessingDialog::ProcessingDialog(FileListModel *fileListModel, AudioFileModel *metaInfo, SettingsModel *settings, QWidget *parent)
+ProcessingDialog::ProcessingDialog(FileListModel *fileListModel, const AudioFileModel_MetaInfo *metaInfo, SettingsModel *settings, QWidget *parent)
:
QDialog(parent),
ui(new Ui::ProcessingDialog),
@@ -964,10 +964,10 @@ void ProcessingDialog::writePlayList(void)
int counter = 1;
//Generate playlist name
- QString playListName = (m_metaInfo->metaInfo().album().isEmpty() ? "Playlist" : m_metaInfo->metaInfo().album());
- if(!m_metaInfo->metaInfo().artist().isEmpty())
+ QString playListName = (m_metaInfo->album().isEmpty() ? "Playlist" : m_metaInfo->album());
+ if(!m_metaInfo->artist().isEmpty())
{
- playListName = QString("%1 - %2").arg(m_metaInfo->metaInfo().artist(), playListName);
+ playListName = QString("%1 - %2").arg(m_metaInfo->artist(), playListName);
}
//Clean playlist name
@@ -1039,7 +1039,7 @@ AudioFileModel ProcessingDialog::updateMetaInfo(AudioFileModel &audioFile)
return audioFile;
}
- audioFile.metaInfo().update(m_metaInfo->metaInfo());
+ audioFile.metaInfo().update(*m_metaInfo);
if(audioFile.metaInfo().position() == UINT_MAX)
{
diff --git a/src/Dialog_Processing.h b/src/Dialog_Processing.h
index f33b683a..43fad999 100644
--- a/src/Dialog_Processing.h
+++ b/src/Dialog_Processing.h
@@ -28,6 +28,7 @@
class AbstractEncoder;
class AudioFileModel;
+class AudioFileModel_MetaInfo;
class CPUObserverThread;
class DiskObserverThread;
class FileListModel;
@@ -60,7 +61,7 @@ class ProcessingDialog : public QDialog
Q_OBJECT
public:
- ProcessingDialog(FileListModel *fileListModel, AudioFileModel *metaInfo, SettingsModel *settings, QWidget *parent = 0);
+ ProcessingDialog(FileListModel *fileListModel, const AudioFileModel_MetaInfo *metaInfo, SettingsModel *settings, QWidget *parent = 0);
~ProcessingDialog(void);
int getShutdownFlag(void) { return m_shutdownFlag; }
@@ -106,7 +107,7 @@ private:
QThreadPool *m_threadPool;
QList m_pendingJobs;
SettingsModel *m_settings;
- AudioFileModel *m_metaInfo;
+ const AudioFileModel_MetaInfo *const m_metaInfo;
QMovie *m_progressIndicator;
ProgressModel *m_progressModel;
QMap m_playList;
diff --git a/src/Main.cpp b/src/Main.cpp
index f7cf174a..bbbd9a1b 100644
--- a/src/Main.cpp
+++ b/src/Main.cpp
@@ -159,7 +159,7 @@ static int lamexp_main(int argc, char* argv[])
//Create models
FileListModel *fileListModel = new FileListModel();
- AudioFileModel *metaInfo = new AudioFileModel();
+ AudioFileModel_MetaInfo *metaInfo = new AudioFileModel_MetaInfo();
SettingsModel *settingsModel = new SettingsModel();
//Show splash screen
diff --git a/src/Model_AudioFile.h b/src/Model_AudioFile.h
index 29084824..d8a5e72c 100644
--- a/src/Model_AudioFile.h
+++ b/src/Model_AudioFile.h
@@ -57,7 +57,7 @@ public:
inline void setAlbum(const QString &album) { m_album = album.trimmed(); }
inline void setGenre(const QString &genre) { m_genre = genre.trimmed(); }
inline void setComment(const QString &comment) { m_comment = comment.trimmed(); }
- inline const ArtworkModel &setCover(const QString &path, const bool isOwner) { m_cover.setFilePath(path, isOwner); }
+ inline void setCover(const QString &path, const bool isOwner) { m_cover.setFilePath(path, isOwner); }
inline void setYear(const unsigned int year) { m_year = year; }
inline void setPosition(const unsigned int position) { m_position = position; }
@@ -108,17 +108,17 @@ public:
inline unsigned int duration(void) const { return m_duration; }
//Setter
- inline const QString &setContainerType(const QString &containerType) { m_containerType = containerType.trimmed(); }
- inline const QString &setContainerProfile(const QString &containerProfile) { m_containerProfile = containerProfile.trimmed(); }
- inline const QString &setAudioType(const QString &audioType) { m_audioType = audioType.trimmed(); }
- inline const QString &setAudioProfile(const QString &audioProfile) { m_audioProfile = audioProfile.trimmed(); }
- inline const QString &setAudioVersion(const QString &audioVersion) { m_audioVersion = audioVersion.trimmed(); }
- inline const QString &setAudioEncodeLib(const QString &audioEncodeLib) { m_audioEncodeLib = audioEncodeLib.trimmed(); }
- inline unsigned int setAudioSamplerate(const unsigned int audioSamplerate) { m_audioSamplerate = audioSamplerate; }
- inline unsigned int setAudioChannels(const unsigned int audioChannels) { m_audioChannels = audioChannels; }
- inline unsigned int setAudioBitdepth(const unsigned int audioBitdepth) { m_audioBitdepth = audioBitdepth; }
- inline unsigned int setAudioBitrate(const unsigned int audioBitrate) { m_audioBitrate = audioBitrate; }
- inline unsigned int setAudioBitrateMode(const unsigned int audioBitrateMode) { m_audioBitrateMode = audioBitrateMode; }
+ inline void setContainerType(const QString &containerType) { m_containerType = containerType.trimmed(); }
+ inline void setContainerProfile(const QString &containerProfile) { m_containerProfile = containerProfile.trimmed(); }
+ inline void setAudioType(const QString &audioType) { m_audioType = audioType.trimmed(); }
+ inline void setAudioProfile(const QString &audioProfile) { m_audioProfile = audioProfile.trimmed(); }
+ inline void setAudioVersion(const QString &audioVersion) { m_audioVersion = audioVersion.trimmed(); }
+ inline void setAudioEncodeLib(const QString &audioEncodeLib) { m_audioEncodeLib = audioEncodeLib.trimmed(); }
+ inline void setAudioSamplerate(const unsigned int audioSamplerate) { m_audioSamplerate = audioSamplerate; }
+ inline void setAudioChannels(const unsigned int audioChannels) { m_audioChannels = audioChannels; }
+ inline void setAudioBitdepth(const unsigned int audioBitdepth) { m_audioBitdepth = audioBitdepth; }
+ inline void setAudioBitrate(const unsigned int audioBitrate) { m_audioBitrate = audioBitrate; }
+ inline void setAudioBitrateMode(const unsigned int audioBitrateMode) { m_audioBitrateMode = audioBitrateMode; }
inline void setDuration(const unsigned int duration) { m_duration = duration; }
//Reset
@@ -173,7 +173,7 @@ public:
inline AudioFileModel_TechInfo &techInfo(void) { return m_techInfo; }
//Setter
- inline const QString &setFilePath(const QString &filePath) { m_filePath = filePath; }
+ inline void setFilePath(const QString &filePath) { m_filePath = filePath; }
inline void setMetaInfo(const AudioFileModel_MetaInfo &metaInfo) { m_metaInfo = metaInfo; }
inline void setTechInfo(const AudioFileModel_TechInfo &techInfo) { m_techInfo = techInfo; }
diff --git a/src/Model_MetaInfo.cpp b/src/Model_MetaInfo.cpp
index 3c495cb4..e1d6b232 100644
--- a/src/Model_MetaInfo.cpp
+++ b/src/Model_MetaInfo.cpp
@@ -39,18 +39,24 @@
// Constructor & Destructor
////////////////////////////////////////////////////////////
-MetaInfoModel::MetaInfoModel(AudioFileModel *file, unsigned int offset)
+MetaInfoModel::MetaInfoModel(AudioFileModel *file)
+:
+ m_fullInfo(file),
+ m_metaInfo(&file->metaInfo()),
+ m_offset(0)
{
- if(offset >= MODEL_ROW_COUNT)
- {
- throw "Offset is out of range!";
- }
-
m_textUnknown = QString("(%1)").arg(tr("Unknown"));
m_textNotSpecified = QString("(%1)").arg(tr("Not Specified"));
+}
- m_audioFile = file;
- m_offset = offset;
+MetaInfoModel::MetaInfoModel(AudioFileModel_MetaInfo *metaInfo)
+:
+ m_fullInfo(NULL),
+ m_metaInfo(metaInfo),
+ m_offset(6)
+{
+ m_textUnknown = QString("(%1)").arg(tr("Unknown"));
+ m_textNotSpecified = QString("(%1)").arg(tr("Not Specified"));
}
MetaInfoModel::~MetaInfoModel(void)
@@ -78,40 +84,40 @@ QVariant MetaInfoModel::data(const QModelIndex &index, int role) const
switch(index.row() + m_offset)
{
case 0:
- return (!index.column()) ? tr("Full Path") : CHECK1(m_audioFile->filePath());
+ return (!index.column()) ? tr("Full Path") : CHECK1(m_fullInfo->filePath());
break;
case 1:
- return (!index.column()) ? tr("Format") : CHECK1(m_audioFile->audioBaseInfo());
+ return (!index.column()) ? tr("Format") : CHECK1(m_fullInfo->audioBaseInfo());
break;
case 2:
- return (!index.column()) ? tr("Container") : CHECK1(m_audioFile->containerInfo());
+ return (!index.column()) ? tr("Container") : CHECK1(m_fullInfo->containerInfo());
break;
case 3:
- return (!index.column()) ? tr("Compression") : CHECK1(m_audioFile->audioCompressInfo());
+ return (!index.column()) ? tr("Compression") : CHECK1(m_fullInfo->audioCompressInfo());
break;
case 4:
- return (!index.column()) ? tr("Duration") : CHECK1(m_audioFile->durationInfo());
+ return (!index.column()) ? tr("Duration") : CHECK1(m_fullInfo->durationInfo());
break;
case 5:
- return (!index.column()) ? tr("Title") : CHECK1(m_audioFile->metaInfo().title());
+ return (!index.column()) ? tr("Title") : CHECK1(m_metaInfo->title());
break;
case 6:
- return (!index.column()) ? tr("Artist") : CHECK1(m_audioFile->metaInfo().artist());
+ return (!index.column()) ? tr("Artist") : CHECK1(m_metaInfo->artist());
break;
case 7:
- return (!index.column()) ? tr("Album") : CHECK1(m_audioFile->metaInfo().album());
+ return (!index.column()) ? tr("Album") : CHECK1(m_metaInfo->album());
break;
case 8:
- return (!index.column()) ? tr("Genre") : CHECK1(m_audioFile->metaInfo().genre());
+ return (!index.column()) ? tr("Genre") : CHECK1(m_metaInfo->genre());
break;
case 9:
- return (!index.column()) ? tr("Year") : CHECK2(m_audioFile->metaInfo().year());
+ return (!index.column()) ? tr("Year") : CHECK2(m_metaInfo->year());
break;
case 10:
- return (!index.column()) ? tr("Position") : ((m_audioFile->metaInfo().position() == UINT_MAX) ? tr("Generate from list position") : CHECK2(m_audioFile->metaInfo().position()));
+ return (!index.column()) ? tr("Position") : ((m_metaInfo->position() == UINT_MAX) ? tr("Generate from list position") : CHECK2(m_metaInfo->position()));
break;
case 11:
- return (!index.column()) ? tr("Comment") : CHECK1(m_audioFile->metaInfo().comment());
+ return (!index.column()) ? tr("Comment") : CHECK1(m_metaInfo->comment());
break;
default:
return QVariant();
@@ -168,40 +174,40 @@ QVariant MetaInfoModel::data(const QModelIndex &index, int role) const
switch(index.row() + m_offset)
{
case 0:
- return CHECK3(m_audioFile->filePath());
+ return CHECK3(m_fullInfo->filePath());
break;
case 1:
- return CHECK3(m_audioFile->audioBaseInfo());
+ return CHECK3(m_fullInfo->audioBaseInfo());
break;
case 2:
- return CHECK3(m_audioFile->containerInfo());
+ return CHECK3(m_fullInfo->containerInfo());
break;
case 3:
- return CHECK3(m_audioFile->audioCompressInfo());
+ return CHECK3(m_fullInfo->audioCompressInfo());
break;
case 4:
- return CHECK4(m_audioFile->durationInfo());
+ return CHECK4(m_fullInfo->durationInfo());
break;
case 5:
- return CHECK3(m_audioFile->metaInfo().title());
+ return CHECK3(m_metaInfo->title());
break;
case 6:
- return CHECK3(m_audioFile->metaInfo().artist());
+ return CHECK3(m_metaInfo->artist());
break;
case 7:
- return CHECK3(m_audioFile->metaInfo().album());
+ return CHECK3(m_metaInfo->album());
break;
case 8:
- return CHECK3(m_audioFile->metaInfo().genre());
+ return CHECK3(m_metaInfo->genre());
break;
case 9:
- return CHECK4(m_audioFile->metaInfo().year());
+ return CHECK4(m_metaInfo->year());
break;
case 10:
- return CHECK4(m_audioFile->metaInfo().position());
+ return CHECK4(m_metaInfo->position());
break;
case 11:
- return CHECK3(m_audioFile->metaInfo().comment());
+ return CHECK3(m_metaInfo->comment());
break;
default:
return QVariant();
@@ -254,7 +260,7 @@ bool MetaInfoModel::setData (const QModelIndex &index, const QVariant &value, in
switch(index.row() + m_offset)
{
case 0:
- m_audioFile->setFilePath(value.toString());
+ m_fullInfo->setFilePath(value.toString());
break;
case 1:
case 2:
@@ -262,28 +268,28 @@ bool MetaInfoModel::setData (const QModelIndex &index, const QVariant &value, in
return false;
break;
case 4:
- m_audioFile->techInfo().setDuration(value.toUInt());
+ m_fullInfo->techInfo().setDuration(value.toUInt());
break;
case 5:
- m_audioFile->metaInfo().setTitle(value.toString());
+ m_metaInfo->setTitle(value.toString());
break;
case 6:
- m_audioFile->metaInfo().setArtist(value.toString());
+ m_metaInfo->setArtist(value.toString());
break;
case 7:
- m_audioFile->metaInfo().setAlbum(value.toString());
+ m_metaInfo->setAlbum(value.toString());
break;
case 8:
- m_audioFile->metaInfo().setGenre(value.toString());
+ m_metaInfo->setGenre(value.toString());
break;
case 9:
- m_audioFile->metaInfo().setYear(value.toUInt());
+ m_metaInfo->setYear(value.toUInt());
break;
case 10:
- m_audioFile->metaInfo().setPosition(value.toUInt());
+ m_metaInfo->setPosition(value.toUInt());
break;
case 11:
- m_audioFile->metaInfo().setComment(value.toString());
+ m_metaInfo->setComment(value.toString());
break;
default:
return false;
@@ -311,43 +317,43 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
case 5:
input.setWindowTitle(tr("Edit Title"));
input.setLabelText(EXPAND(tr("Please enter the title for this file:")));
- input.setTextValue(m_audioFile->metaInfo().title());
+ input.setTextValue(m_metaInfo->title());
if(input.exec() != 0)
{
temp = input.textValue().simplified();
if(temp.isEmpty())
{
QMessageBox::warning(parent, tr("Edit Title"), tr("The title must not be empty. Generating title from file name!"));
- temp = QFileInfo(m_audioFile->filePath()).completeBaseName().replace("_", " ").simplified();
+ temp = QFileInfo(m_fullInfo->filePath()).completeBaseName().replace("_", " ").simplified();
int index = temp.lastIndexOf(" - ");
if(index >= 0) temp = temp.mid(index + 3).trimmed();
}
beginResetModel();
- m_audioFile->metaInfo().setTitle(temp.isEmpty() ? QString() : temp);
+ m_metaInfo->setTitle(temp.isEmpty() ? QString() : temp);
endResetModel();
}
break;
case 6:
input.setWindowTitle(tr("Edit Artist"));
input.setLabelText(EXPAND(tr("Please enter the artist for this file:")));
- input.setTextValue(m_audioFile->metaInfo().artist());
+ input.setTextValue(m_metaInfo->artist());
if(input.exec() != 0)
{
temp = input.textValue().simplified();
beginResetModel();
- m_audioFile->metaInfo().setArtist(temp.isEmpty() ? QString() : temp);
+ m_metaInfo->setArtist(temp.isEmpty() ? QString() : temp);
endResetModel();
}
break;
case 7:
input.setWindowTitle(tr("Edit Album"));
input.setLabelText(EXPAND(tr("Please enter the album for this file:")));
- input.setTextValue(m_audioFile->metaInfo().album());
+ input.setTextValue(m_metaInfo->album());
if(input.exec() != 0)
{
temp = input.textValue().simplified();
beginResetModel();
- m_audioFile->metaInfo().setAlbum(temp.isEmpty() ? QString() : temp);
+ m_metaInfo->setAlbum(temp.isEmpty() ? QString() : temp);
endResetModel();
}
break;
@@ -356,12 +362,12 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
input.setLabelText(EXPAND(tr("Please enter the genre for this file:")));
for(int i = 0; g_lamexp_generes[i]; i++) generes << g_lamexp_generes[i];
input.setComboBoxItems(generes);
- input.setTextValue(m_audioFile->metaInfo().genre());
+ input.setTextValue(m_metaInfo->genre());
if(input.exec() != 0)
{
temp = input.textValue().simplified();
beginResetModel();
- m_audioFile->metaInfo().setGenre((temp.isEmpty() || !temp.compare(generes.at(0), Qt::CaseInsensitive)) ? QString() : temp);
+ m_metaInfo->setGenre((temp.isEmpty() || !temp.compare(generes.at(0), Qt::CaseInsensitive)) ? QString() : temp);
endResetModel();
}
break;
@@ -369,13 +375,13 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
input.setWindowTitle(tr("Edit Year"));
input.setLabelText(EXPAND(tr("Please enter the year for this file:")));
input.setIntRange(0, 2100);
- input.setIntValue((m_audioFile->metaInfo().year() ? m_audioFile->metaInfo().year() : 1900));
+ input.setIntValue((m_metaInfo->year() ? m_metaInfo->year() : 1900));
input.setIntStep(1);
if(input.exec() != 0)
{
val = input.intValue();
beginResetModel();
- m_audioFile->metaInfo().setYear(val);
+ m_metaInfo->setYear(val);
endResetModel();
}
break;
@@ -385,13 +391,13 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
input.setWindowTitle(tr("Edit Position"));
input.setLabelText(EXPAND(tr("Please enter the position (track no.) for this file:")));
input.setIntRange(0, 99);
- input.setIntValue((m_audioFile->metaInfo().position() ? m_audioFile->metaInfo().position() : 1));
+ input.setIntValue((m_metaInfo->position() ? m_metaInfo->position() : 1));
input.setIntStep(1);
if(input.exec() != 0)
{
val = input.intValue();
beginResetModel();
- m_audioFile->metaInfo().setPosition(val);
+ m_metaInfo->setPosition(val);
endResetModel();
}
}
@@ -402,12 +408,12 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
input.setWindowTitle(tr("Edit Position"));
input.setLabelText(EXPAND(tr("Please enter the position (track no.) for this file:")));
input.setComboBoxItems(options);
- input.setTextValue(options.value((m_audioFile->metaInfo().position() == UINT_MAX) ? 1 : 0));
+ input.setTextValue(options.value((m_metaInfo->position() == UINT_MAX) ? 1 : 0));
if(input.exec() != 0)
{
temp = input.textValue().simplified();
beginResetModel();
- m_audioFile->metaInfo().setPosition((options.indexOf(temp) == 1) ? UINT_MAX : 0);
+ m_metaInfo->setPosition((options.indexOf(temp) == 1) ? UINT_MAX : 0);
endResetModel();
}
}
@@ -415,12 +421,12 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
case 11:
input.setWindowTitle(tr("Edit Comment"));
input.setLabelText(EXPAND(tr("Please enter the comment for this file:")));
- input.setTextValue((m_audioFile->metaInfo().comment().isEmpty() ? tr("Encoded with LameXP") : m_audioFile->metaInfo().comment()));
+ input.setTextValue((m_metaInfo->comment().isEmpty() ? tr("Encoded with LameXP") : m_metaInfo->comment()));
if(input.exec() != 0)
{
temp = input.textValue().simplified();
beginResetModel();
- m_audioFile->metaInfo().setComment(temp.isEmpty() ? QString() : temp);
+ m_metaInfo->setComment(temp.isEmpty() ? QString() : temp);
endResetModel();
}
break;
@@ -432,7 +438,7 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
void MetaInfoModel::editArtwork(const QString &imagePath)
{
- m_audioFile->metaInfo().setCover(imagePath, false);
+ m_metaInfo->setCover(imagePath, false);
}
void MetaInfoModel::clearData(bool clearMetaOnly)
@@ -442,39 +448,23 @@ void MetaInfoModel::clearData(bool clearMetaOnly)
m_textUnknown = QString("(%1)").arg(tr("Unknown"));
m_textNotSpecified = QString("(%1)").arg(tr("Not Specified"));
- m_audioFile->metaInfo().reset();
- m_audioFile->metaInfo().setComment(tr("Encoded with LameXP"));
- m_audioFile->metaInfo().setPosition(m_offset ? UINT_MAX : 0);
-
- //m_audioFile->setFileArtist(QString());
- //m_audioFile->setFileAlbum(QString());
- //m_audioFile->setFileGenre(QString());
- //m_audioFile->setFileComment(tr("Encoded with LameXP"));
- //m_audioFile->setFileCover(QString(), false);
- //m_audioFile->setFileYear(0);
- //m_audioFile->setFilePosition(m_offset ? UINT_MAX : 0);
-
- if(!clearMetaOnly)
+ if((!clearMetaOnly) && m_fullInfo)
{
- m_audioFile->techInfo().reset();
-
- //m_audioFile->setFilePath(QString());
- //m_audioFile->setFileName(QString());
- //m_audioFile->setFileDuration(0);
- //m_audioFile->setFormatContainerType(QString());
- //m_audioFile->setFormatContainerProfile(QString());
- //m_audioFile->setFormatAudioType(QString());
- //m_audioFile->setFormatAudioProfile(QString());
- //m_audioFile->setFormatAudioVersion(QString());
- //m_audioFile->setFormatAudioSamplerate(0);
- //m_audioFile->setFormatAudioChannels(0);
- //m_audioFile->setFormatAudioBitdepth(0);
+ m_fullInfo->techInfo().reset();
}
- else
+
+ if(m_metaInfo)
{
- QString temp = QFileInfo(m_audioFile->filePath()).baseName();
+ m_metaInfo->reset();
+ m_metaInfo->setComment(tr("Encoded with LameXP"));
+ m_metaInfo->setPosition(m_offset ? UINT_MAX : 0);
+ }
+
+ if(m_fullInfo)
+ {
+ QString temp = QFileInfo(m_fullInfo->filePath()).baseName();
temp = temp.split("-", QString::SkipEmptyParts).last().trimmed();
- m_audioFile->metaInfo().setTitle(temp);
+ m_metaInfo->setTitle(temp);
}
endResetModel();
@@ -488,6 +478,6 @@ Qt::ItemFlags MetaInfoModel::flags(const QModelIndex &index) const
void MetaInfoModel::assignInfoFrom(const AudioFileModel &file)
{
beginResetModel();
- m_audioFile->metaInfo().update(file.metaInfo());
+ m_metaInfo->update(file.metaInfo());
endResetModel();
}
diff --git a/src/Model_MetaInfo.h b/src/Model_MetaInfo.h
index 8346c2ab..bfed4e9a 100644
--- a/src/Model_MetaInfo.h
+++ b/src/Model_MetaInfo.h
@@ -31,7 +31,8 @@ class MetaInfoModel : public QAbstractTableModel
Q_OBJECT
public:
- MetaInfoModel(AudioFileModel *file, unsigned int offset = 0);
+ MetaInfoModel(AudioFileModel *file);
+ MetaInfoModel(AudioFileModel_MetaInfo *metaInfo);
~MetaInfoModel(void);
//Model functions
@@ -47,8 +48,11 @@ public:
void clearData(bool clearMetaOnly = false);
private:
- AudioFileModel* m_audioFile;
- unsigned int m_offset;
+ const unsigned int m_offset;
+
+ AudioFileModel *const m_fullInfo;
+ AudioFileModel_MetaInfo *const m_metaInfo;
+
QString m_textNotSpecified;
QString m_textUnknown;
};