void XSPFParser::Save(const SongList& songs, QIODevice* device, const QDir&) const { QXmlStreamWriter writer(device); writer.writeStartDocument(); StreamElement playlist("playlist", &writer); writer.writeAttribute("version", "1"); writer.writeDefaultNamespace("http://xspf.org/ns/0/"); StreamElement tracklist("trackList", &writer); foreach (const Song& song, songs) { StreamElement track("track", &writer); writer.writeTextElement("location", song.url().toString()); writer.writeTextElement("title", song.title()); if (!song.artist().isEmpty()) { writer.writeTextElement("creator", song.artist()); } if (!song.album().isEmpty()) { writer.writeTextElement("album", song.album()); } if (song.length_nanosec() != -1) { writer.writeTextElement("duration", QString::number(song.length_nanosec() / kNsecPerMsec)); } QString art = song.art_manual().isEmpty() ? song.art_automatic() : song.art_manual(); // Ignore images that are in our resource bundle. if (!art.startsWith(":") && !art.isEmpty()) { // Convert local files to URLs. if (!art.contains("://")) { art = QUrl::fromLocalFile(art).toString(); } writer.writeTextElement("image", art); } }
void AudioPlayerControlRunner::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match) { Q_UNUSED(context) QDBusInterface tracklist(QString::fromLatin1( "org.mpris.%1").arg(m_player), QLatin1String( "/TrackList" ), QLatin1String( "org.freedesktop.MediaPlayer" )); QVariantList data = match.data().value<QVariantList>(); /* Only Amarok part*/ QString url = data[2].toString(); int pos = posInPlaylist(url); kDebug() << "pos" << pos; QAction *a = match.selectedAction(); if (data[3].toString().compare(NONE)) { if (!a) { a = action(data[3].toString()); } if (a == action(QUEUE)) { KUrl::List list; list << KUrl(url); KRun::run(QLatin1String( "amarok --queue %u" ), list, 0); } else if (a == action(APPEND)) { if (!(pos > -1)) { tracklist.call(QDBus::NoBlock, QLatin1String( "AddTrack" ), url , false); } } else { //Action play was selected if (pos > -1) { tracklist.call(QDBus::NoBlock, QLatin1String( "PlayTrack" ), pos); } else { tracklist.call(QDBus::NoBlock, QLatin1String( "AddTrack" ), url, true); } } }/* Only Amarok part over */ else { if ((data[4].toString().compare(QLatin1String( "start" )) == 0)) { //The players's interface isn't available but it should be started if (!startPlayer()) { return; } } QDBusMessage msg = QDBusMessage::createMethodCall(QString::fromLatin1( "org.mpris.%1").arg(m_player),data[0].toString(), data[1].toString(), data[2].toString()); kDebug() << msg; QVariantList args; for (int i = 5;data.length() > i;++i) { args << data[i]; } msg.setArguments(args); QDBusConnection::sessionBus().call(msg, QDBus::NoBlock); } }