diff --git a/src/library/baseplaylistfeature.cpp b/src/library/baseplaylistfeature.cpp index 20f6e98f6068..252a6268d661 100644 --- a/src/library/baseplaylistfeature.cpp +++ b/src/library/baseplaylistfeature.cpp @@ -349,9 +349,10 @@ void BasePlaylistFeature::slotImportPlaylist() { ConfigValue(fileName.dir().absolutePath())); slotImportPlaylistFile(playlist_file); + activateChild(m_lastRightClickedIndex); } -void BasePlaylistFeature::slotImportPlaylistFile(QString &playlist_file) { +void BasePlaylistFeature::slotImportPlaylistFile(const QString &playlist_file) { // The user has picked a new directory via a file dialog. This means the // system sandboxer (if we are sandboxed) has granted us permission to this // folder. We don't need access to this file on a regular basis so we do not @@ -375,7 +376,6 @@ void BasePlaylistFeature::slotImportPlaylistFile(QString &playlist_file) { // Iterate over the List that holds URLs of playlist entires m_pPlaylistTableModel->addTracks(QModelIndex(), entries); - activateChild(m_lastRightClickedIndex); // delete the parser object delete playlist_parser; @@ -383,45 +383,61 @@ void BasePlaylistFeature::slotImportPlaylistFile(QString &playlist_file) { } void BasePlaylistFeature::slotCreateImportPlaylist() { - if (!m_pPlaylistTableModel) return; + if (!m_pPlaylistTableModel) { + return; + } // Get file to read - QString playlist_file = LibraryFeature::getPlaylistFile(); - if (playlist_file.isEmpty()) return; - - QFileInfo fileName(playlist_file); + QStringList playlist_files = LibraryFeature::getPlaylistFiles(); + if (playlist_files.isEmpty()) { + return; + } + + // Set last import directory + QFileInfo fileName(playlist_files.first()); m_pConfig->set(ConfigKey("[Library]","LastImportExportPlaylistDirectory"), ConfigValue(fileName.dir().absolutePath())); - - // Get a valid name - QString baseName = fileName.baseName(); - QString name; - bool validNameGiven = false; - int i = 0; - while (!validNameGiven) { - name = baseName; - if (i != 0) name += QString::number(i); - - // Check name - int existingId = m_playlistDao.getPlaylistIdFromName(name); - - validNameGiven = (existingId == -1); - ++i; - } - - int playlistId = m_playlistDao.createPlaylist(name); - if (playlistId != -1) { - activatePlaylist(playlistId); - } - else { - QMessageBox::warning(NULL, - tr("Playlist Creation Failed"), - tr("An unknown error occurred while creating playlist: ") - + name); - return; + + int lastPlaylistId = -1; + + // For each selected element create a different playlist. + for (const QString& playlistFile : playlist_files) { + fileName = QFileInfo(playlistFile); + + // Get a valid name + QString baseName = fileName.baseName(); + QString name; + + bool validNameGiven = false; + int i = 0; + while (!validNameGiven) { + name = baseName; + if (i != 0) { + name += QString::number(i); + } + + // Check name + int existingId = m_playlistDao.getPlaylistIdFromName(name); + + validNameGiven = (existingId == -1); + ++i; + } + + lastPlaylistId = m_playlistDao.createPlaylist(name); + if (lastPlaylistId != -1 && m_pPlaylistTableModel) { + m_pPlaylistTableModel->setTableModel(lastPlaylistId); + } + else { + QMessageBox::warning(NULL, + tr("Playlist Creation Failed"), + tr("An unknown error occurred while creating playlist: ") + + name); + return; + } + + slotImportPlaylistFile(playlistFile); } - - slotImportPlaylistFile(playlist_file); + activatePlaylist(lastPlaylistId); } void BasePlaylistFeature::slotExportPlaylist() { diff --git a/src/library/baseplaylistfeature.h b/src/library/baseplaylistfeature.h index 3d6a43cbb902..4b8583cc22d0 100644 --- a/src/library/baseplaylistfeature.h +++ b/src/library/baseplaylistfeature.h @@ -59,7 +59,7 @@ class BasePlaylistFeature : public LibraryFeature { void slotRenamePlaylist(); void slotTogglePlaylistLock(); void slotImportPlaylist(); - void slotImportPlaylistFile(QString &playlist_file); + void slotImportPlaylistFile(const QString &playlist_file); void slotCreateImportPlaylist(); void slotExportPlaylist(); // Copy all of the tracks in a playlist to a new directory. diff --git a/src/library/cratefeature.cpp b/src/library/cratefeature.cpp index 699b481ac83b..5149723115d5 100644 --- a/src/library/cratefeature.cpp +++ b/src/library/cratefeature.cpp @@ -55,7 +55,7 @@ CrateFeature::CrateFeature(Library* pLibrary, m_pCreateImportPlaylistAction = new QAction(tr("Import Crate"), this); connect(m_pCreateImportPlaylistAction, SIGNAL(triggered()), - this, SLOT(slotCreateImportPlaylist())); + this, SLOT(slotCreateImportCrate())); m_pExportPlaylistAction = new QAction(tr("Export Crate"), this); connect(m_pExportPlaylistAction, SIGNAL(triggered()), @@ -582,9 +582,10 @@ void CrateFeature::slotImportPlaylist() { ConfigValue(fileName.dir().absolutePath())); slotImportPlaylistFile(playlist_file); + activateChild(m_lastRightClickedIndex); } -void CrateFeature::slotImportPlaylistFile(QString &playlist_file) { +void CrateFeature::slotImportPlaylistFile(const QString &playlist_file) { // The user has picked a new directory via a file dialog. This means the // system sandboxer (if we are sandboxed) has granted us permission to this // folder. We don't need access to this file on a regular basis so we do not @@ -610,51 +611,66 @@ void CrateFeature::slotImportPlaylistFile(QString &playlist_file) { //Iterate over the List that holds URLs of playlist entires m_crateTableModel.addTracks(QModelIndex(), entries); - activateChild(m_lastRightClickedIndex); //delete the parser object delete playlist_parser; } } -void CrateFeature::slotCreateImportPlaylist() { +void CrateFeature::slotCreateImportCrate() { // Get file to read - QString playlist_file = getPlaylistFile(); - if (playlist_file.isEmpty()) return; - - QFileInfo fileName(playlist_file); - m_pConfig->set(ConfigKey("[Library]","LastImportExportCrateDirectory"), - ConfigValue(fileName.dir().absolutePath())); - - // Get a valid name - QString baseName = fileName.baseName(); - QString name; - bool validNameGiven = false; - int i = 0; - while (!validNameGiven) { - name = baseName; - if (i != 0) name += QString::number(i); - - // Check name - int existingId = m_crateDao.getCrateIdByName(name); - - validNameGiven = (existingId == -1); - ++i; + QStringList playlist_files = LibraryFeature::getPlaylistFiles(); + if (playlist_files.isEmpty()) { + return; } - - int playlistId = m_crateDao.createCrate(name); - - if (playlistId != -1) activateCrate(playlistId); - else { - QMessageBox::warning(NULL, - tr("Playlist Creation Failed"), - tr("An unknown error occurred while creating playlist: ") - + name); - return; + + + // Set last import directory + QFileInfo fileName(playlist_files.first()); + m_pConfig->set(ConfigKey("[Library]","LastImportExportCrateDirectory"), + ConfigValue(fileName.dir().absolutePath())); + + int lastCrateId = -1; + + // For each selected file + for (const QString& playlistFile : playlist_files) { + fileName = QFileInfo(playlistFile); + + // Get a valid name + QString baseName = fileName.baseName(); + QString name; + bool validNameGiven = false; + int i = 0; + while (!validNameGiven) { + name = baseName; + if (i != 0) { + name += QString::number(i); + } + + // Check name + int existingId = m_crateDao.getCrateIdByName(name); + + validNameGiven = (existingId == -1); + ++i; + } + + lastCrateId = m_crateDao.createCrate(name); + + if (lastCrateId != -1) { + m_crateTableModel.setTableModel(lastCrateId); + } + else { + QMessageBox::warning(NULL, + tr("Crate Creation Failed"), + tr("An unknown error occurred while creating crate: ") + + name); + return; + } + + slotImportPlaylistFile(playlistFile); } - - slotImportPlaylistFile(playlist_file); + activateCrate(lastCrateId); } void CrateFeature::slotAnalyzeCrate() { diff --git a/src/library/cratefeature.h b/src/library/cratefeature.h index c6bdaca0d622..495b74ad7c33 100644 --- a/src/library/cratefeature.h +++ b/src/library/cratefeature.h @@ -58,8 +58,8 @@ class CrateFeature : public LibraryFeature { void slotAutoDjTrackSourceChanged(); void slotToggleCrateLock(); void slotImportPlaylist(); - void slotImportPlaylistFile(QString &playlist_file); - void slotCreateImportPlaylist(); + void slotImportPlaylistFile(const QString &playlist_file); + void slotCreateImportCrate(); void slotExportPlaylist(); // Copy all of the tracks in a crate to a new directory (like a thumbdrive). void slotExportTrackFiles(); diff --git a/src/library/libraryfeature.cpp b/src/library/libraryfeature.cpp index 9b9c55ab45c3..8b3f52302610 100644 --- a/src/library/libraryfeature.cpp +++ b/src/library/libraryfeature.cpp @@ -20,7 +20,7 @@ LibraryFeature::~LibraryFeature() { } -QString LibraryFeature::getPlaylistFile() { +QStringList LibraryFeature::getPlaylistFiles(QFileDialog::FileMode mode) { QString lastPlaylistDirectory = m_pConfig->getValueString( ConfigKey("[Library]", "LastImportExportPlaylistDirectory"), QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); @@ -30,10 +30,10 @@ QString LibraryFeature::getPlaylistFile() { lastPlaylistDirectory, tr("Playlist Files (*.m3u *.m3u8 *.pls *.csv)")); dialogg.setAcceptMode(QFileDialog::AcceptOpen); - dialogg.setFileMode(QFileDialog::ExistingFile); + dialogg.setFileMode(mode); dialogg.setModal(true); // If the user refuses return - if (! dialogg.exec()) return QString(); - return dialogg.selectedFiles().first(); + if (! dialogg.exec()) return QStringList(); + return dialogg.selectedFiles(); } diff --git a/src/library/libraryfeature.h b/src/library/libraryfeature.h index 7ecdbdbd6e89..f750bf6cda16 100644 --- a/src/library/libraryfeature.h +++ b/src/library/libraryfeature.h @@ -65,8 +65,9 @@ class LibraryFeature : public QObject { KeyboardEventFilter* /* keyboard */) {} virtual TreeItemModel* getChildModel() = 0; -protected: - QString getPlaylistFile(); + protected: + inline QStringList getPlaylistFiles() { return getPlaylistFiles(QFileDialog::ExistingFiles); } + inline QString getPlaylistFile() { return getPlaylistFiles(QFileDialog::ExistingFile).first(); } UserSettingsPointer m_pConfig; public slots: @@ -107,6 +108,8 @@ class LibraryFeature : public QObject { void enableCoverArtDisplay(bool); void trackSelected(TrackPointer pTrack); + private: + QStringList getPlaylistFiles(QFileDialog::FileMode mode); };