コード例 #1
0
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);
    }
  }
コード例 #2
0
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);
    }
}