Added support for exporting Meta tags to a simple CSV file.

This commit is contained in:
LoRd_MuldeR 2012-01-04 03:23:07 +01:00
parent 9b687fff9a
commit 8e65917d9c
6 changed files with 127 additions and 1 deletions

View File

@ -97,6 +97,7 @@
<file>icons/sound.png</file> <file>icons/sound.png</file>
<file>icons/star.png</file> <file>icons/star.png</file>
<file>icons/table_edit.png</file> <file>icons/table_edit.png</file>
<file>icons/table_save.png</file>
<file>icons/tick.png</file> <file>icons/tick.png</file>
<file>icons/timeline_marker.png</file> <file>icons/timeline_marker.png</file>
<file>icons/transmit.png</file> <file>icons/transmit.png</file>

View File

@ -30,7 +30,7 @@
#define VER_LAMEXP_MINOR_LO 4 #define VER_LAMEXP_MINOR_LO 4
#define VER_LAMEXP_TYPE Alpha #define VER_LAMEXP_TYPE Alpha
#define VER_LAMEXP_PATCH 13 #define VER_LAMEXP_PATCH 13
#define VER_LAMEXP_BUILD 866 #define VER_LAMEXP_BUILD 867
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Tool versions (minimum expected versions!) // Tool versions (minimum expected versions!)

View File

@ -125,6 +125,8 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
m_showDetailsContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/zoom.png"), "N/A"); m_showDetailsContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/zoom.png"), "N/A");
m_previewContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/sound.png"), "N/A"); m_previewContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/sound.png"), "N/A");
m_findFileContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/folder_go.png"), "N/A"); 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");
SET_FONT_BOLD(m_showDetailsContextAction, true); SET_FONT_BOLD(m_showDetailsContextAction, true);
connect(buttonAddFiles, SIGNAL(clicked()), this, SLOT(addFilesButtonClicked())); connect(buttonAddFiles, SIGNAL(clicked()), this, SLOT(addFilesButtonClicked()));
connect(buttonRemoveFile, SIGNAL(clicked()), this, SLOT(removeFileButtonClicked())); connect(buttonRemoveFile, SIGNAL(clicked()), this, SLOT(removeFileButtonClicked()));
@ -141,6 +143,7 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
connect(m_showDetailsContextAction, SIGNAL(triggered(bool)), this, SLOT(showDetailsButtonClicked())); connect(m_showDetailsContextAction, SIGNAL(triggered(bool)), this, SLOT(showDetailsButtonClicked()));
connect(m_previewContextAction, SIGNAL(triggered(bool)), this, SLOT(previewContextActionTriggered())); connect(m_previewContextAction, SIGNAL(triggered(bool)), this, SLOT(previewContextActionTriggered()));
connect(m_findFileContextAction, SIGNAL(triggered(bool)), this, SLOT(findFileContextActionTriggered())); connect(m_findFileContextAction, SIGNAL(triggered(bool)), this, SLOT(findFileContextActionTriggered()));
connect(m_exportCsvContextAction, SIGNAL(triggered(bool)), this, SLOT(exportCsvContextActionTriggered()));
//Setup "Output" tab //Setup "Output" tab
m_fileSystemModel = new QFileSystemModelEx(); m_fileSystemModel = new QFileSystemModelEx();
@ -703,6 +706,7 @@ void MainWindow::changeEvent(QEvent *e)
m_findFileContextAction->setText(tr("Browse File Location")); m_findFileContextAction->setText(tr("Browse File Location"));
m_showFolderContextAction->setText(tr("Browse Selected Folder")); m_showFolderContextAction->setText(tr("Browse Selected Folder"));
m_addFavoriteFolderAction->setText(tr("Bookmark Current Output Folder")); m_addFavoriteFolderAction->setText(tr("Bookmark Current Output Folder"));
m_exportCsvContextAction->setText(tr("Export Meta Tags to CSV File"));
//Force GUI update //Force GUI update
m_metaInfoModel->clearData(); m_metaInfoModel->clearData();
@ -2127,6 +2131,51 @@ void MainWindow::handleDelayedFiles(void)
addFiles(selectedFiles); addFiles(selectedFiles);
} }
void MainWindow::exportCsvContextActionTriggered(void)
{
TEMP_HIDE_DROPBOX
(
QString selectedCsvFile;
if(USE_NATIVE_FILE_DIALOG)
{
selectedCsvFile = QFileDialog::getSaveFileName(this, tr("Save CSV file"), m_settings->mostRecentInputPath(), QString("%1 (*.csv)").arg(tr("CSV File")));
}
else
{
QFileDialog dialog(this, tr("Save CSV file"));
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setAcceptMode(QFileDialog::AcceptSave);
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->exportToCsv(selectedCsvFile))
{
case 1:
QMessageBox::critical(this, tr("CSV Export"), NOBR(tr("There are no meta tags that could be exported!")));
break;
case 2:
QMessageBox::critical(this, tr("CSV Export"), NOBR(tr("Sorry, failed to open CSV file for writing!")));
break;
case 3:
QMessageBox::critical(this, tr("CSV Export"), NOBR(tr("Sorry, failed to write to the CSV file!")));
break;
default:
QMessageBox::information(this, tr("CSV Export"), NOBR(tr("The CSV files was created successfully!")));
break;
}
}
)
}
/* /*
* Show or hide Drag'n'Drop notice after model reset * Show or hide Drag'n'Drop notice after model reset
*/ */

View File

@ -78,6 +78,7 @@ private slots:
void documentActionActivated(void); void documentActionActivated(void);
void editMetaButtonClicked(void); void editMetaButtonClicked(void);
void encodeButtonClicked(void); void encodeButtonClicked(void);
void exportCsvContextActionTriggered(void);
void fileDownButtonClicked(void); void fileDownButtonClicked(void);
void fileUpButtonClicked(void); void fileUpButtonClicked(void);
void findFileContextActionTriggered(void); void findFileContextActionTriggered(void);
@ -183,6 +184,7 @@ private:
QAction *m_showDetailsContextAction; QAction *m_showDetailsContextAction;
QAction *m_showFolderContextAction; QAction *m_showFolderContextAction;
QAction *m_addFavoriteFolderAction; QAction *m_addFavoriteFolderAction;
QAction *m_exportCsvContextAction;
QActionGroup *m_languageActionGroup; QActionGroup *m_languageActionGroup;
QActionGroup *m_styleActionGroup; QActionGroup *m_styleActionGroup;
QActionGroup *m_tabActionGroup; QActionGroup *m_tabActionGroup;

View File

@ -23,6 +23,7 @@
#include <QFileInfo> #include <QFileInfo>
#include <QDir> #include <QDir>
#include <QFile>
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// Constructor & Destructor // Constructor & Destructor
@ -224,3 +225,73 @@ bool FileListModel::setFile(const QModelIndex &index, const AudioFileModel &audi
return false; return false;
} }
} }
int FileListModel::exportToCsv(const QString &outFile)
{
const int nFiles = m_fileList.count();
bool havePosition = false, haveTitle = false, haveArtist = false, haveAlbum = false, haveGenre = false, haveYear = false, haveComment = false;
for(int i = 0; i < nFiles; i++)
{
if(m_fileList.at(i).filePosition() > 0) havePosition = true;
if(!m_fileList.at(i).fileName().isEmpty()) haveTitle = true;
if(!m_fileList.at(i).fileArtist().isEmpty()) haveArtist = true;
if(!m_fileList.at(i).fileAlbum().isEmpty()) haveAlbum = true;
if(!m_fileList.at(i).fileGenre().isEmpty()) haveGenre = true;
if(m_fileList.at(i).fileYear() > 0) haveYear = true;
if(!m_fileList.at(i).fileComment().isEmpty()) haveComment = true;
}
if(!(haveTitle || haveArtist || haveAlbum || haveGenre || haveYear || haveComment))
{
return 1;
}
QFile file(outFile);
if(file.open(QIODevice::WriteOnly))
{
QStringList line;
if(havePosition) line << "POSITION";
if(haveTitle) line << "TITLE";
if(haveArtist) line << "ARTIST";
if(haveAlbum) line << "ALBUM";
if(haveGenre) line << "GENRE";
if(haveYear) line << "YEAR";
if(haveComment) line << "COMMENT";
if(file.write(line.join(";").append("\r\n").toUtf8().prepend("\xef\xbb\xbf")) < 1)
{
file.close();
return 3;
}
}
else
{
return 2;
}
for(int i = 0; i < nFiles; i++)
{
QStringList line;
if(havePosition) line << QString::number(m_fileList.at(i).filePosition());
if(haveTitle) line << m_fileList.at(i).fileName().trimmed();
if(haveArtist) line << m_fileList.at(i).fileArtist().trimmed();
if(haveAlbum) line << m_fileList.at(i).fileAlbum().trimmed();
if(haveGenre) line << m_fileList.at(i).fileGenre().trimmed();
if(haveYear) line << QString::number(m_fileList.at(i).fileYear());
if(haveComment) line << m_fileList.at(i).fileComment().trimmed();
if(file.write(line.replaceInStrings(";", ",").join(";").append("\r\n").toUtf8()) < 1)
{
file.close();
return 3;
}
}
file.close();
return 0;
}

View File

@ -48,6 +48,9 @@ public:
bool setFile(const QModelIndex &index, const AudioFileModel &audioFile); bool setFile(const QModelIndex &index, const AudioFileModel &audioFile);
AudioFileModel &operator[] (const QModelIndex &index); AudioFileModel &operator[] (const QModelIndex &index);
//CSV export/import
int exportToCsv(const QString &outFile);
public slots: public slots:
void addFile(const QString &filePath); void addFile(const QString &filePath);
void addFile(const AudioFileModel &file); void addFile(const AudioFileModel &file);