void CrateFeature::slotExportTrackFiles() { // Create a new table model since the main one might have an active search. QScopedPointer<CrateTableModel> pCrateTableModel( new CrateTableModel(this, m_pTrackCollection)); pCrateTableModel->setTableModel(m_crateTableModel.getCrate()); pCrateTableModel->select(); int rows = pCrateTableModel->rowCount(); QList<TrackPointer> trackpointers; for (int i = 0; i < rows; ++i) { QModelIndex index = m_crateTableModel.index(i, 0); trackpointers.push_back(m_crateTableModel.getTrack(index)); } TrackExportWizard track_export(nullptr, m_pConfig, trackpointers); track_export.exportTracks(); }
void CrateFeature::slotExportPlaylist() { qDebug() << "Export crate" << m_lastRightClickedIndex.data(); QString lastCrateDirectory = m_pConfig->getValueString( ConfigKey("[Library]", "LastImportExportCrateDirectory"), QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); QString file_location = QFileDialog::getSaveFileName( NULL, tr("Export Crate"), lastCrateDirectory, tr("M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt)")); // Exit method if user cancelled the open dialog. if (file_location.isNull() || file_location.isEmpty()) { return; } // Update the import/export crate directory QFileInfo fileName(file_location); m_pConfig->set(ConfigKey("[Library]","LastImportExportCrateDirectory"), ConfigValue(fileName.dir().absolutePath())); // 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 // register a security bookmark. // check config if relative paths are desired bool useRelativePath = static_cast<bool>( m_pConfig->getValueString( ConfigKey("[Library]", "UseRelativePathOnExport")).toInt()); // Create list of files of the crate QList<QString> playlist_items; // Create a new table model since the main one might have an active search. QScopedPointer<CrateTableModel> pCrateTableModel( new CrateTableModel(this, m_pTrackCollection)); pCrateTableModel->setTableModel(m_crateTableModel.getCrate()); pCrateTableModel->select(); if (file_location.endsWith(".csv", Qt::CaseInsensitive)) { ParserCsv::writeCSVFile(file_location, pCrateTableModel.data(), useRelativePath); } else if (file_location.endsWith(".txt", Qt::CaseInsensitive)) { ParserCsv::writeReadableTextFile(file_location, pCrateTableModel.data(), false); } else{ // populate a list of files of the crate QList<QString> playlist_items; int rows = pCrateTableModel->rowCount(); for (int i = 0; i < rows; ++i) { QModelIndex index = m_crateTableModel.index(i, 0); playlist_items << m_crateTableModel.getTrackLocation(index); } if (file_location.endsWith(".pls", Qt::CaseInsensitive)) { ParserPls::writePLSFile(file_location, playlist_items, useRelativePath); } else if (file_location.endsWith(".m3u8", Qt::CaseInsensitive)) { ParserM3u::writeM3U8File(file_location, playlist_items, useRelativePath); } else { //default export to M3U if file extension is missing if(!file_location.endsWith(".m3u", Qt::CaseInsensitive)) { qDebug() << "Crate export: No valid file extension specified. Appending .m3u " << "and exporting to M3U."; file_location.append(".m3u"); } ParserM3u::writeM3UFile(file_location, playlist_items, useRelativePath); } } }