void WplParser::Save(const SongList& songs, QIODevice* device, const QDir& dir) const { QXmlStreamWriter writer(device); writer.setAutoFormatting(true); writer.setAutoFormattingIndent(2); writer.writeProcessingInstruction("wpl", "version=\"1.0\""); StreamElement smil("smil", &writer); { StreamElement head("head", &writer); WriteMeta("Generator", "Clementine -- " CLEMENTINE_VERSION_DISPLAY, &writer); WriteMeta("ItemCount", QString::number(songs.count()), &writer); } { StreamElement body("body", &writer); { StreamElement seq("seq", &writer); for (const Song& song : songs) { writer.writeStartElement("media"); writer.writeAttribute("src", URLOrRelativeFilename(song.url(), dir)); writer.writeEndElement(); } } } }
void PLSParser::Save(const SongList &songs, QIODevice *device, const QDir &dir) const { QTextStream s(device); s << "[playlist]" << endl; s << "Version=2" << endl; s << "NumberOfEntries=" << songs.count() << endl; int n = 1; foreach (const Song& song, songs) { s << "File" << n << "=" << URLOrRelativeFilename(song.url(), dir) << endl; s << "Title" << n << "=" << song.title() << endl; s << "Length" << n << "=" << song.length_nanosec() / kNsecPerSec << endl; ++n; }
void M3UParser::Save(const SongList& songs, QIODevice* device, const QDir& dir) const { device->write("#EXTM3U\n"); QSettings s; s.beginGroup(Playlist::kSettingsGroup); bool writeMetadata = s.value(Playlist::kWriteMetadata, true).toBool(); s.endGroup(); for (const Song& song : songs) { if (song.url().isEmpty()) { continue; } if (writeMetadata) { QString meta = QString("#EXTINF:%1,%2 - %3\n") .arg(song.length_nanosec() / kNsecPerSec) .arg(song.artist()) .arg(song.title()); device->write(meta.toUtf8()); } device->write(URLOrRelativeFilename(song.url(), dir).toUtf8()); device->write("\n"); } }