OSDN Git Service

kdeplasma-addons: rework audioplayercontrol runner for MPRISv2
authorIvailo Monev <xakepa10@gmail.com>
Mon, 26 Jul 2021 20:59:53 +0000 (23:59 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Tue, 27 Jul 2021 00:57:33 +0000 (03:57 +0300)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
kdeplasma-addons/runners/audioplayercontrol/audioplayercontrolconfigkeys.h
kdeplasma-addons/runners/audioplayercontrol/audioplayercontrolrunner.cpp
kdeplasma-addons/runners/audioplayercontrol/audioplayercontrolrunner.h
kdeplasma-addons/runners/audioplayercontrol/audioplayercontrolrunner_config.cpp
kdeplasma-addons/runners/audioplayercontrol/audioplayercontrolrunner_config.h
kdeplasma-addons/runners/audioplayercontrol/audioplayercontrolrunner_config.ui
kdeplasma-addons/runners/audioplayercontrol/plasma-runner-audioplayercontrol.desktop

index 089de7e..27d3c43 100644 (file)
 #define AUDIOPLAYERCONTROLRUNNERCONFIGKEYS_H
 
 static const char * CONFIG_COMMANDS = "useCommands";
-static const char * CONFIG_COLLECTION = "searchCollection";
 static const char * CONFIG_PLAY = "com_play";
 static const char * CONFIG_APPEND = "com_append";
-static const char * CONFIG_QUEUE = "com_queue";
 static const char * CONFIG_PAUSE = "com_pause";
 static const char * CONFIG_NEXT = "com_next";
-static const char * CONFIG_MUTE = "com_mute";
-static const char * CONFIG_INCREASE = "com_up";
-static const char * CONFIG_INCREASE_BY = "val_up";
-static const char * CONFIG_DECREASE = "com_down";
-static const char * CONFIG_DECREASE_BY = "val_down";
 static const char * CONFIG_PREV = "com_prev";
 static const char * CONFIG_STOP = "com_stop";
 static const char * CONFIG_VOLUME = "com_volume";
index e5edadb..0e9579a 100644 (file)
@@ -41,18 +41,20 @@ Q_DECLARE_METATYPE(QList<QVariantMap>)
 static const QString PLAY(QLatin1String("play"));
 /** The variable APPEND contains the action label for append */
 static const QString APPEND(QLatin1String("append"));
-/** The variable QUEUE contains the action label for queue */
-static const QString QUEUE(QLatin1String("queue"));
 /** The variable NONE says that no action is needed */
 static const QString NONE(QLatin1String("none"));
 
+// for reference:
+// https://specifications.freedesktop.org/mpris-spec/latest/
+
+typedef QList<QDBusObjectPath> TrackListType;
 
 AudioPlayerControlRunner::AudioPlayerControlRunner(QObject *parent, const QVariantList& args)
-        : Plasma::AbstractRunner(parent, args)
+    : Plasma::AbstractRunner(parent, args)
 {
     Q_UNUSED(args);
 
-    setObjectName(QLatin1String( "Audio Player Control Runner" ));
+    setObjectName(QLatin1String("Audio Player Control Runner"));
     setSpeed(AbstractRunner::SlowSpeed);
 
     qDBusRegisterMetaType<QList<QVariantMap> >();
@@ -66,25 +68,32 @@ AudioPlayerControlRunner::~AudioPlayerControlRunner()
 {
 }
 
-
 void AudioPlayerControlRunner::prep()
 {
     m_running = false;
     m_songsInPlaylist = 0;
-    m_currentTrack = -1;
     m_nextSongAvailable = false;
     m_prevSongAvailable = false;
 
-    QDBusInterface player(QString::fromLatin1( "org.mpris.%1").arg(m_player), QLatin1String( "/TrackList" ), QLatin1String( "org.freedesktop.MediaPlayer" ));
-    QDBusPendingCall call = player.asyncCall(QLatin1String( "GetLength" ));
-    QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this);
-    QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
-                     this, SLOT(songsInPlaylist(QDBusPendingCallWatcher*)));
+    QDBusInterface player(QString::fromLatin1("org.mpris.MediaPlayer2.%1").arg(m_player),
+        QLatin1String("/org/mpris/MediaPlayer2"), QLatin1String("org.mpris.MediaPlayer2.Player"));
+    m_running = player.isValid();
 
-    call = player.asyncCall(QLatin1String( "GetCurrentTrack" ));
-    watcher = new QDBusPendingCallWatcher(call, this);
-    QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
-                     this, SLOT(prevNextSongAvailable(QDBusPendingCallWatcher*)));
+    if (m_running) {
+        QDBusInterface trackList(QString::fromLatin1("org.mpris.MediaPlayer2.%1").arg(m_player),
+            QLatin1String("/org/mpris/MediaPlayer2"), QLatin1String("org.mpris.MediaPlayer2.TrackList"));
+        m_songsInPlaylist = qvariant_cast<TrackListType>(trackList.property("Tracks")).size();
+
+        // NOTE: Audacious implements both properties but not org.mpris.MediaPlayer2.TrackList, the
+        // properties also are set to true even if there is only one track in the playlist - what
+        // to do with that?
+        // NOTE: VLC implements org.mpris.MediaPlayer2.TrackList but not the properties - what to
+        // do with that?
+        if (m_songsInPlaylist > 0) {
+            m_nextSongAvailable = player.property("CanGoNext").toBool();
+            m_prevSongAvailable = player.property("CanGoPrevious").toBool();
+        }
+    }
 }
 
 void AudioPlayerControlRunner::match(Plasma::RunnerContext &context)
@@ -98,155 +107,82 @@ void AudioPlayerControlRunner::match(Plasma::RunnerContext &context)
     QList<Plasma::QueryMatch> matches;
 
     if (m_useCommands) {
-        /* DBus paths that are used in the command executes */
-        /* The data variable looks like this:
-         * "/PlayerQLatin1String( " " )org.freedesktop.MediaPlayerQLatin1String( " " )PlayQLatin1String( " " )actionsQLatin1String( " " )start" args...
-         * <path>    <interface>                 <method> <actions> <start player>
-         * <actions> is NONE if no action is needed
-         */
-
         QVariantList playcontrol;
-        playcontrol  << QLatin1String( "/Player" ) << QLatin1String( "org.freedesktop.MediaPlayer" );
+        playcontrol  << QLatin1String("/org/mpris/MediaPlayer2") << QLatin1String("org.mpris.MediaPlayer2.Player");
 
         /* The commands */
 
-        //Play
+        // Play
+        // TODO: does not make sense if already playing (not paused)
         if (context.isValid() && m_comPlay.startsWith(term, Qt::CaseInsensitive) &&
-           (!m_running || m_songsInPlaylist)) {
+            (!m_running || m_songsInPlaylist)) {
             QVariantList data = playcontrol;
-            data << ((currentSong() == -1) ? QLatin1String( "Next" ) : QLatin1String( "Play" )) << NONE << QLatin1String( "start" );
-            matches << createMatch(this, i18n("Start playing"), i18n("Audio player control"), QLatin1String( "play" ),
-                                   KIcon( QLatin1String( "media-playback-start" )), data, 1.0);
+            data << QLatin1String("Play") << NONE << QLatin1String("start");
+            matches << createMatch(this, i18n("Start playing"), i18n("Audio player control"), QLatin1String("play"),
+                                   KIcon(QLatin1String("media-playback-start")), data, 1.0);
         }
 
         if (!context.isValid() || !m_running) {
-            //The interface of the player is not availalbe, so the rest of the commands
-            //is not needed
+            // The interface of the player is not availalbe, so the rest of the commands
+            // is not needed
             context.addMatches(term,matches);
             return;
         }
 
         if (context.isValid() && m_songsInPlaylist) {
-            //The playlist isn't empty
-            //Next song
-            if (m_comNext.startsWith(term,Qt::CaseInsensitive)
-                    && m_nextSongAvailable) {
+            // The playlist isn't empty
+            // Next song
+            if (m_comNext.startsWith(term, Qt::CaseInsensitive) && m_nextSongAvailable) {
                 QVariantList data = playcontrol;
-                data << QLatin1String( "Next" ) << NONE << QLatin1String( "nostart" );
+                data << QLatin1String("Next") << NONE << QLatin1String("nostart");
                 matches << createMatch(this, i18n("Play next song"), i18n("Audio player control"),
-                                       QLatin1String( "next" ), KIcon( QLatin1String( "media-skip-forward" )), data, 1.0);
+                                       QLatin1String("next"), KIcon(QLatin1String("media-skip-forward")), data, 1.0);
             }
 
-            //Previous song
-            if (context.isValid() && m_comPrev.startsWith(term,Qt::CaseInsensitive)
-                    && m_prevSongAvailable) {
+            // Previous song
+            if (context.isValid() && m_comPrev.startsWith(term, Qt::CaseInsensitive) && m_prevSongAvailable) {
                 QVariantList data = playcontrol;
-                data << QLatin1String( "Prev" ) << NONE << QLatin1String( "nostart" );
+                data << QLatin1String("Previous") << NONE << QLatin1String("nostart");
                 matches << createMatch(this, i18n("Play previous song"), i18n("Audio player control") ,
-                                       QLatin1String( "previous" ), KIcon( QLatin1String( "media-skip-backward" )), data, 1.0);
+                                       QLatin1String("previous"), KIcon(QLatin1String("media-skip-backward")), data, 1.0);
             }
-        }//--- if (m_songsInPlaylist)
+        } // --- if (m_songsInPlaylist)
 
-        //Pause
-        if (context.isValid() && m_comPause.startsWith(term,Qt::CaseInsensitive)) {
+        // Pause
+        // TODO: does not make sense if not playing (paused)
+        if (context.isValid() && m_comPause.startsWith(term, Qt::CaseInsensitive)) {
             QVariantList data = playcontrol;
-            data << QLatin1String( "Pause" ) << NONE << QLatin1String( "nostart" );
+            data << QLatin1String("Pause") << NONE << QLatin1String("nostart");
             matches << createMatch(this, i18n("Pause playing"), i18n("Audio player control"),
-                                   QLatin1String( "pause" ), KIcon( QLatin1String( "media-playback-pause" )), data, 1.0);
+                                   QLatin1String("pause"), KIcon(QLatin1String("media-playback-pause")), data, 1.0);
         }
 
-        //Stop
-        if (context.isValid() && m_comStop.startsWith(term,Qt::CaseInsensitive)) {
+        // Stop
+        if (context.isValid() && m_comStop.startsWith(term, Qt::CaseInsensitive)) {
             QVariantList data = playcontrol;
-            data << QLatin1String( "Stop" ) << NONE << QLatin1String( "nostart" );
+            data << QLatin1String("Stop") << NONE << QLatin1String("nostart");
             matches << createMatch(this, i18n("Stop playing"), i18n("Audio player control"),
-                                   QLatin1String( "stop" ), KIcon( QLatin1String( "media-playback-stop" )), data, 1.0);
+                                   QLatin1String("stop"), KIcon(QLatin1String("media-playback-stop")), data, 1.0);
         }
 
-        //Increase
-        if (context.isValid() && m_comIncrease.startsWith(term,Qt::CaseInsensitive)) {
-            QVariantList data = playcontrol;
-            data << QLatin1String( "VolumeUp" ) << NONE << QLatin1String( "nostart" ) << m_increaseBy;
-            matches << createMatch(this, i18n("Increase volume by %1" , m_increaseBy),
-                                   QLatin1String( "volumeup" ), i18n("Audio player control"), KIcon(QLatin1String( "audio-volume-high" )), data, 1.0);
-        } else if (context.isValid() && equals(term, QRegExp( m_comIncrease + QLatin1String( " \\d{1,2}0{0,1}" ) ) ) ) {
-            int volumeChange = getNumber(term, ' ' );
-            QVariantList data = playcontrol;
-            data << QLatin1String( "VolumeUp" ) << NONE << QLatin1String( "nostart" ) << volumeChange;
-            matches << createMatch(this, i18n("Increase volume by %1" , volumeChange),
-                                   QLatin1String( "volumeup" ), i18n("Audio player control"), KIcon(QLatin1String( "audio-volume-high" )), data, 1.0);
-        }
-
-        //Decrease
-        if (context.isValid() && m_comDecrease.startsWith(term,Qt::CaseInsensitive)) {
-            QVariantList data = playcontrol;
-            data << QLatin1String( "VolumeDown" ) << NONE << QLatin1String( "nostart" ) << m_decreaseBy;
-            matches << createMatch(this, i18n("Reduce volume by %1", m_decreaseBy),
-                                   QLatin1String( "volumedown" ), i18n("Audio player control"), KIcon(QLatin1String( "audio-volume-low" )), data, 1.0);
-        } else if (context.isValid() && equals(term, QRegExp( m_comDecrease + QLatin1String( " \\d{1,2}0{0,1}" ) ) ) ) {
-            int volumeChange = getNumber(term, ' ');
-            QVariantList data = playcontrol;
-            data << QLatin1String( "VolumeDown" ) << NONE << QLatin1String( "nostart" ) << volumeChange;
-            matches << createMatch(this, i18n("Reduce volume by %1", volumeChange),
-                                   QLatin1String( "volumedown" ), i18n("Audio player control"), KIcon(QLatin1String( "audio-volume-low" )), data, 1.0);
-        }
-
-        //Set volume to
-        if (context.isValid() && equals(term, QRegExp( m_comVolume + QLatin1String( " \\d{1,2}0{0,1}" ) ) ) ) {
+        // Set volume to
+        if (context.isValid() && equals(term, QRegExp(m_comVolume + QLatin1String(" \\d{1,2}0{0,1}") ) ) ) {
             QVariantList data = playcontrol;
             int newVolume = getNumber(term , ' ');
-            data << QLatin1String( "VolumeSet" ) << NONE << QLatin1String( "nostart" ) << newVolume;
+            data << QLatin1String("Volume") << NONE << QLatin1String("nostart") << (newVolume / 100.0);
             matches << createMatch(this, i18n("Set volume to %1%" , newVolume),
-                                   QLatin1String( "volume" ), i18n("Audio player control"), KIcon(QLatin1String( "audio-volume-medium" )), data, 1.0);
+                                   QLatin1String("volume"), i18n("Audio player control"), KIcon(QLatin1String("audio-volume-medium")), data, 1.0);
         }
 
-        //Mute
-        if (context.isValid() && m_comMute.startsWith(term,Qt::CaseInsensitive)) {
-            QVariantList data = playcontrol;
-            data << QLatin1String( "Mute" ) << NONE << QLatin1String( "nostart" );
-            matches << createMatch(this, i18n("Mute"), i18n("Audio player control"),
-                                   QLatin1String( "mute" ), KIcon( QLatin1String( "audio-volume-muted" )), data, 1.0);
-        }
-
-        //Quit player
-        if (context.isValid() && m_comQuit.startsWith(term,Qt::CaseInsensitive)) {
+        // Quit player
+        if (context.isValid() && m_comQuit.startsWith(term, Qt::CaseInsensitive)) {
             QVariantList data;
-            data  << QLatin1String( "/" ) << QLatin1String( "org.freedesktop.MediaPlayer" ) << QLatin1String( "Quit" ) << NONE
-            << QLatin1String( "nostart" );
-            matches << createMatch(this, i18n("Quit %1", m_player),QLatin1String( "" ),
-                                   QLatin1String( "quit" ), KIcon( QLatin1String( "application-exit" )), data, 1.0);
-        }
-    }//--- if (m_useCommands)
-
-    if (context.isValid() && m_searchCollection) {
-        QString actionNames;
-        QString searchTerm = term;
-        QString command;
-
-        if (term.startsWith(m_comPlay,Qt::CaseInsensitive)
-                && term.length() > m_comPlay.length()) {
-            command = m_comPlay;
-            actionNames = PLAY;
-        } else if (term.startsWith(m_comAppend, Qt::CaseInsensitive)
-                   && term.length() > m_comAppend.length()) {
-            command = m_comAppend;
-            actionNames = APPEND;
-        } else if (term.startsWith(m_comQueue, Qt::CaseInsensitive)
-                   && term.length() > m_comQueue.length()) {
-            command = m_comQueue;
-            actionNames = QUEUE;
-        } else {
-            actionNames = QString::fromLatin1( "%1,%2,%3").arg(PLAY).arg(APPEND).arg(QUEUE);
+            data  << QLatin1String("/org/mpris/MediaPlayer2") << QLatin1String("org.mpris.MediaPlayer2") << QLatin1String("Quit") << NONE
+            << QLatin1String("nostart");
+            matches << createMatch(this, i18n("Quit %1", m_player), QLatin1String(""),
+                                   QLatin1String("quit"), KIcon(QLatin1String("application-exit")), data, 1.0);
         }
-
-       if (!context.isValid())
-       {
-           return;
-       }
-        searchTerm = searchTerm.right(searchTerm.length() - (command.length() + 1));
-        matches << searchCollectionFor(searchTerm, actionNames);
-        //Adds matches for all song matches for term
-    }
+    } // --- if (m_useCommands)
 
     context.addMatches(term, matches);
 }
@@ -254,55 +190,33 @@ void AudioPlayerControlRunner::match(Plasma::RunnerContext &context)
 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;
-            }
+    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);
+    // special case for properties
+    if (data[2].toString().compare(QLatin1String("Volume")) == 0) {
+        QDBusInterface player(QString::fromLatin1("org.mpris.MediaPlayer2.%1").arg(m_player),
+            data[0].toString(), data[1].toString());
+        player.setProperty(data[2].toByteArray(), data[5]);
+        return;
     }
+
+    QDBusMessage msg = QDBusMessage::createMethodCall(QString::fromLatin1("org.mpris.MediaPlayer2.%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);
 }
 
 QList<QAction*> AudioPlayerControlRunner::actionsForMatch(const Plasma::QueryMatch &match)
@@ -312,13 +226,11 @@ QList<QAction*> AudioPlayerControlRunner::actionsForMatch(const Plasma::QueryMat
 
     if (data.length() > 3 && data[3].toString().compare(NONE)) {
         if (!action(PLAY)) {
-            addAction(PLAY, KIcon(QLatin1String( "media-playback-start" )), i18n("Play"));
-            addAction(QUEUE, KIcon(QLatin1String( "media-track-queue-amarok" )), i18n("Queue"));
-            addAction(APPEND, KIcon(QLatin1String( "media-track-add-amarok" )), i18n("Append to playlist"));
+            addAction(PLAY, KIcon(QLatin1String("media-playback-start")), i18n("Play"));
+            addAction(APPEND, KIcon(QLatin1String("media-track-add-amarok")), i18n("Append to playlist"));
         }
 
         const QStringList actions = data[3].toString().split(QLatin1Char( ',' ));
-
         for (int i = 0; i < actions.length(); ++i) {
             ret << action(actions[i]);
         }
@@ -330,19 +242,12 @@ QList<QAction*> AudioPlayerControlRunner::actionsForMatch(const Plasma::QueryMat
 void AudioPlayerControlRunner::reloadConfiguration()
 {
     KConfigGroup grp = config();
-    m_player = grp.readEntry(CONFIG_PLAYER, "amarok");
+    m_player = grp.readEntry(CONFIG_PLAYER, "vlc");
     m_useCommands = grp.readEntry(CONFIG_COMMANDS, true);
-    m_searchCollection = grp.readEntry(CONFIG_COLLECTION, true);
     m_comPlay = grp.readEntry(CONFIG_PLAY, i18n("play"));
     m_comAppend = grp.readEntry(CONFIG_APPEND, i18n("append"));
-    m_comQueue = grp.readEntry(CONFIG_QUEUE, i18n("queue"));
     m_comPause = grp.readEntry(CONFIG_PAUSE, i18n("pause"));
     m_comNext = grp.readEntry(CONFIG_NEXT, i18n("next"));
-    m_comMute = grp.readEntry(CONFIG_MUTE, i18n("mute"));
-    m_comIncrease = grp.readEntry(CONFIG_INCREASE, i18n("increase"));
-    m_increaseBy = qBound(0, grp.readEntry(CONFIG_INCREASE_BY, 15), 100);
-    m_comDecrease = grp.readEntry(CONFIG_DECREASE, i18n("decrease"));
-    m_decreaseBy = qBound(0, grp.readEntry(CONFIG_DECREASE_BY, 15), 100);
     m_comPrev = grp.readEntry(CONFIG_PREV, i18n("prev"));
     m_comStop = grp.readEntry(CONFIG_STOP, i18n("stop"));
     m_comVolume = grp.readEntry(CONFIG_VOLUME, i18n("volume"));
@@ -351,27 +256,12 @@ void AudioPlayerControlRunner::reloadConfiguration()
     /* Adding the syntaxes for helping the user */
     QList<Plasma::RunnerSyntax> syntaxes;
 
-    if (m_player == QLatin1String( "amarok" )) {
-        syntaxes << Plasma::RunnerSyntax(m_comPlay + QLatin1String( " :q:" ),
-                                         i18n("Plays the selected song. If :q: is not empty it lists songs matching :q: to play them"));
-        syntaxes << Plasma::RunnerSyntax(m_comAppend + QLatin1String( " :q:" ),
-                                         i18n("Displays songs matching :q: for appending the selected to the playlist"));
-        syntaxes << Plasma::RunnerSyntax(m_comQueue + QLatin1String( " :q:" ),
-                                         i18n("Displays songs matching :q: for queueing them"));
-    } else {
-        syntaxes << Plasma::RunnerSyntax(m_comPlay,
-                                         i18n("Plays a song from playlist"));
-    }
+    syntaxes << Plasma::RunnerSyntax(m_comPlay, i18n("Plays a song from playlist"));
     syntaxes << Plasma::RunnerSyntax(m_comPause,i18n("Pauses the playing"));
     syntaxes << Plasma::RunnerSyntax(m_comNext, i18n("Plays the next song in the playlist if one is available"));
-    syntaxes << Plasma::RunnerSyntax(m_comMute, i18n("Mutes/unmutes the player"));
-    syntaxes << Plasma::RunnerSyntax(m_comIncrease + QLatin1String( " :q:" ),
-                                     i18n("Increases the volume by :q:. If :q: is empty it increases by the configured value"));
-    syntaxes << Plasma::RunnerSyntax(m_comDecrease + QLatin1String( " :q:" ),
-                                     i18n("Decreases the volume by :q:. If :q: is empty it decreases by the configured value"));
     syntaxes << Plasma::RunnerSyntax(m_comPrev, i18n("Plays the previous song if one is available"));
     syntaxes << Plasma::RunnerSyntax(m_comStop, i18n("Stops the playing"));
-    syntaxes << Plasma::RunnerSyntax(m_comVolume + QLatin1String( " :q:" ), i18n("Sets the volume to :q:"));
+    syntaxes << Plasma::RunnerSyntax(m_comVolume + QLatin1String(" :q:"), i18n("Sets the volume to :q:"));
     syntaxes << Plasma::RunnerSyntax(m_comQuit, i18n("Quits the player"));
 
     setSyntaxes(syntaxes);
@@ -405,7 +295,7 @@ bool AudioPlayerControlRunner::startPlayer() const
     if (!KRun::run(m_player, KUrl::List(), 0)) {
         //We couldn't start the player
         KMessageBox::error(0, i18n("%1 not found", m_player),
-                           i18n("%1 was not found so the runner is unable to work.", m_player));
+            i18n("%1 was not found so the runner is unable to work.", m_player));
         return false;
     }
 
@@ -413,57 +303,8 @@ bool AudioPlayerControlRunner::startPlayer() const
         //Waiting for the player's interface to appear
         ;
     }*/
-    return true;
-}
-
-int AudioPlayerControlRunner::posInPlaylist(const KUrl& url)
-{
-    QDBusInterface player(QString::fromLatin1( "org.mpris.%1").arg(m_player), QLatin1String( "/TrackList" ), QLatin1String( "org.freedesktop.MediaPlayer" ));
-    for (int i = 0; i < m_songsInPlaylist; i++) {
-        QDBusPendingReply<QVariantMap> data = player.asyncCall(QLatin1String( "GetMetadata" ), i);
-        KUrl curl = KUrl(KUrl::fromPercentEncoding(data.value().value(QLatin1String( "location" )).toByteArray()));
-        kDebug() << curl << ":" << url;
-        if (curl == url) {
-            return i;
-        }
-    }
-    return -1;
-}
-
-void AudioPlayerControlRunner::songsInPlaylist(QDBusPendingCallWatcher *call)
-{
-    QDBusPendingReply<int> reply = *call;
-    m_running = !reply.isError();
-
-    if (m_running) {
-        m_songsInPlaylist = reply.value();
-        if (m_currentTrack > -1) {
-            // calculate if the next song is available given the new count
-            m_nextSongAvailable = m_songsInPlaylist > m_currentTrack;
-        }
-    } else {
-        m_songsInPlaylist = 0;
-    }
-
-    call->deleteLater();
-}
-
-void AudioPlayerControlRunner::prevNextSongAvailable(QDBusPendingCallWatcher *call)
-{
-    QDBusPendingReply<int> reply = *call;
-    m_running = !reply.isError();
-
-    if (m_running) {
-        m_currentTrack = reply.value();
-        if (m_songsInPlaylist > 0) {
-            m_nextSongAvailable = m_songsInPlaylist > m_currentTrack;
-            m_prevSongAvailable = m_currentTrack > 0;
-        }
-    } else {
-        m_currentTrack = 0;
-    }
 
-    call->deleteLater();
+    return true;
 }
 
 bool AudioPlayerControlRunner::equals(const QString &text, QRegExp reg)
@@ -474,72 +315,7 @@ bool AudioPlayerControlRunner::equals(const QString &text, QRegExp reg)
 
 int AudioPlayerControlRunner::getNumber(const QString& term, const char character)
 {
-    return term.section(QLatin1Char( character ), 1, 1).toInt();
-}
-
-QList<Plasma::QueryMatch> AudioPlayerControlRunner::searchCollectionFor(const QString &term, const QString &actionNames)
-{
-    QDBusInterface amarok(QString::fromLatin1( "org.mpris.%1").arg(m_player),
-                          QLatin1String( "/Collection" ), QLatin1String( "org.kde.amarok.Collection" ));
-
-
-    QString query(QLatin1String( "<query version=\"1.0\"><limit value=\"5\" /><filters>" ));
-    QStringList queryItems = term.split(QLatin1Char( ' ' ), QString::SkipEmptyParts);
-    foreach(const QString &queryItem, queryItems) {
-        query.append(QString::fromLatin1( "<or><include field=\"title\" value=\"%1\" />").arg(queryItem));
-        query.append(QString::fromLatin1( "<or><include field=\"artist\" value=\"%1\" />").arg(queryItem));
-        query.append(QString::fromLatin1( "<or><include field=\"album\" value=\"%1\" /></or>").arg(queryItem));
-        query.append(QLatin1String( "</or></or>"));
-    }
-
-    query.append(QLatin1String( "</filters><includeCollection id=\"localCollection\" /></query>" ));
-
-    QDBusPendingReply<QList<QVariantMap> > reply = amarok.asyncCall(QLatin1String( "MprisQuery" ), query);
-    reply.waitForFinished();
-
-    if (!reply.isValid()) {
-        return QList<Plasma::QueryMatch>();
-    }
-
-    QVariantList data;
-    data  << QLatin1String( "/TrackList" ) << QLatin1String( "org.freedesktop.MediaPlayer" );
-    QList<Plasma::QueryMatch> matches;
-    foreach (const QVariantMap &map, reply.value()) {
-        QString artist = map[QLatin1String( "artist" )].toString();
-        QString title = map[QLatin1String( "title" )].toString();
-        QString url = map[QLatin1String( "location" )].toString();
-        QUrl arturl = map[QLatin1String( "arturl" )].toUrl();
-        double relevance = map[QLatin1String( "rating" )].toInt()*0.2;
-        //QString album = map["xesam:album"].toString();
-
-        data << url << actionNames;
-        Plasma::QueryMatch match(this);
-        match.setType(Plasma::QueryMatch::PossibleMatch);
-
-        if (arturl.isValid() && arturl.isLocalFile()) {
-            const QImage image = QImage(arturl.toLocalFile());
-            QIcon icon(new ImageIconEngine(image));
-            match.setIcon(icon);
-        } else {
-            match.setIcon(KIcon( QLatin1String( "audio-x-generic" )));
-        }
-
-        match.setText(QString::fromLatin1( "%1 - %2").arg(artist).arg(title));
-        match.setData(data);
-        match.setRelevance(relevance);
-        match.setId(QLatin1String( "track_" ) + url);
-        matches.append(match);
-        data.removeLast();
-        data.removeLast();
-    }//--- foreach
-
-    return matches;
+    return term.section(QLatin1Char(character), 1, 1).toInt();
 }
 
-int AudioPlayerControlRunner::currentSong()
-{
-    QDBusPendingReply<int> current = QDBusInterface(QString::fromLatin1( "org.mpris.%1").arg(m_player), QLatin1String( "/TrackList" ), QLatin1String( "org.freedesktop.MediaPlayer" )).asyncCall(QLatin1String( "GetCurrentTrack" ));
-    current.waitForFinished();
-    return current;
-}
 #include "moc_audioplayercontrolrunner.cpp"
index 77acf53..2f3f919 100644 (file)
@@ -68,41 +68,22 @@ private:
       */
     bool startPlayer() const;
 
-    /** Returns the position of the song @c song in the playlist
-      * @return the position of the song, -1 if the song is not in it
-      */
-    int posInPlaylist(const KUrl& url);
-
     /** Tests, if text and reg match
       * @param text the string
       * @param reg the regular expression
       * @return @c true if they match, @c false in any other case
       */
-    bool equals(const QString &text, QRegExp reg);
+    static bool equals(const QString &text, QRegExp reg);
 
     /** Looks for the number in the command term (it isn't case sensitive)
       * @param text the term
       * @param character the separator
       * @return the number as int
       */
-    int getNumber(const QString& term, const char character);
-
-    /** Searches the collection for term (it searches in artist,
-      * album and title)
-      * @param term the term to search for, it will be split at whitespaces
-      * and it will be searched after every part
-      * @param actionNames contains the actions (play, append, queue) separated with a QLatin1Char( ',' )
-      * @return a list of Plasma::QueryMatch, where every element is for one match
-      */
-    QList<Plasma::QueryMatch> searchCollectionFor(const QString& term, const QString& actionNames);
-
-    /** @return the index of the selected song in the player's playlist */
-    int currentSong();
+    static int getNumber(const QString& term, const char character);
 
 private slots:
     void prep();
-    void songsInPlaylist(QDBusPendingCallWatcher *call);
-    void prevNextSongAvailable(QDBusPendingCallWatcher *call);
 
 private:
     /** The player this runner controls */
@@ -113,8 +94,6 @@ private:
     QString m_comPlay;
     /** Command for append a song */
     QString m_comAppend;
-    /** Command for queue a song */
-    QString m_comQueue;
     /** Command for pause playing */
     QString m_comPause;
     /** Command for stop playing */
@@ -123,32 +102,14 @@ private:
     QString m_comNext;
     /** Command for playing the previous song */
     QString m_comPrev;
-    /** Command for mute */
-    QString m_comMute;
-    /** Commnd for increase the volume */
-    QString m_comIncrease;
-    /** Command for decrease the volume */
-    QString m_comDecrease;
     /** Command for changing the volume */
     QString m_comVolume;
     /** Command for quit the player */
     QString m_comQuit;
 
-    /** How much to increase */
-    int m_increaseBy;
-
-    /** How much to decrease */
-    int m_decreaseBy;
-
     /** The number of songs in the playlist */
     int m_songsInPlaylist;
 
-    /** The current track, as set on prep */
-    int m_currentTrack;
-
-    /** Search the collection */
-    bool m_searchCollection : 1;
-
     /** Use the commands */
     bool m_useCommands : 1;
 
index 3954f72..d97e633 100644 (file)
@@ -41,19 +41,12 @@ AudioPlayerControlRunnerConfig::AudioPlayerControlRunnerConfig(QWidget* parent,
     layout->addWidget(m_ui, 0, 0);
 
     connect(m_ui->commands, SIGNAL(clicked(bool)),this,SLOT(changed()));
-    connect(m_ui->searchCollection, SIGNAL(stateChanged(int)),this,SLOT(changed()));
     connect(m_ui->player_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(changed()));
     connect(m_ui->player_combo, SIGNAL(editTextChanged(QString)), this, SLOT(changed()));
     connect(m_ui->play_edit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
     connect(m_ui->append_edit, SIGNAL(textChanged(QString)),this,SLOT(changed()));
-    connect(m_ui->queue_edit, SIGNAL(textChanged(QString)),this,SLOT(changed()));
     connect(m_ui->pause_edit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
     connect(m_ui->next_edit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
-    connect(m_ui->mute_edit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
-    connect(m_ui->up_edit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
-    connect(m_ui->up_value, SIGNAL(valueChanged(int)), this, SLOT(changed()));
-    connect(m_ui->down_edit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
-    connect(m_ui->down_value, SIGNAL(valueChanged(int)), this, SLOT(changed()));
     connect(m_ui->prev_edit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
     connect(m_ui->stop_edit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
     connect(m_ui->volume_edit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
@@ -62,9 +55,8 @@ AudioPlayerControlRunnerConfig::AudioPlayerControlRunnerConfig(QWidget* parent,
 
     /* Setup the combobox to select the player */
     m_ui->player_combo->setDuplicatesEnabled(false);
-    connect(m_ui->player_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(onPlayerChanged(int)));
-    connect(m_ui->player_combo, SIGNAL(editTextChanged(QString)), this, SLOT(onPlayerChanged(QString)));
-    m_ui->player_combo->addItem(i18n("Amarok"), QLatin1String("amarok"));
+    m_ui->player_combo->addItem(i18n("VLC"), QLatin1String("vlc"));
+    m_ui->player_combo->addItem(i18n("Audacious"), QLatin1String("audacious"));
     /* template for adding other players:
      * m_ui->player_combo->addItem(i18n("player's name"), "the end of it's MPRIS interface");
      */
@@ -80,7 +72,7 @@ void AudioPlayerControlRunnerConfig::load()
     KSharedConfig::Ptr cfg = KSharedConfig::openConfig(QLatin1String("krunnerrc"));
     KConfigGroup grp = cfg->group("Runners");
     grp = KConfigGroup(&grp, "Audio Player Control Runner");
-    QString player = grp.readEntry(CONFIG_PLAYER, "amarok");
+    QString player = grp.readEntry(CONFIG_PLAYER, "vlc");
     int index = m_ui->player_combo->findData(player);
     if (index == -1) {
         m_ui->player_combo->addItem(player, player);
@@ -89,17 +81,10 @@ void AudioPlayerControlRunnerConfig::load()
         m_ui->player_combo->setCurrentIndex(index);
     }
     m_ui->commands->setChecked(grp.readEntry(CONFIG_COMMANDS,true));
-    m_ui->searchCollection->setChecked(grp.readEntry(CONFIG_COLLECTION,true));
     m_ui->play_edit->setText(grp.readEntry(CONFIG_PLAY , i18n("play")));
     m_ui->append_edit->setText(grp.readEntry(CONFIG_APPEND, i18n("append")));
-    m_ui->queue_edit->setText(grp.readEntry(CONFIG_QUEUE,i18n("queue")));
     m_ui->pause_edit->setText(grp.readEntry(CONFIG_PAUSE, i18n("pause")));
     m_ui->next_edit->setText(grp.readEntry(CONFIG_NEXT, i18nc("next song", "next")));
-    m_ui->mute_edit->setText(grp.readEntry(CONFIG_MUTE , i18n("mute")));
-    m_ui->up_edit->setText(grp.readEntry(CONFIG_INCREASE, i18nc("increase the sound volume", "increase")));
-    m_ui->up_value->setValue(grp.readEntry(CONFIG_INCREASE_BY , 15));
-    m_ui->down_edit->setText(grp.readEntry(CONFIG_DECREASE , i18nc("decrease the sound volume", "decrease")));
-    m_ui->down_value->setValue(grp.readEntry(CONFIG_DECREASE_BY, 15));
     m_ui->prev_edit->setText(grp.readEntry(CONFIG_PREV , i18nc("previous song", "prev")));
     m_ui->stop_edit->setText(grp.readEntry(CONFIG_STOP , i18n("stop")));
     m_ui->volume_edit->setText(grp.readEntry(CONFIG_VOLUME , i18nc("set the sound volume", "volume")));
@@ -115,25 +100,13 @@ void AudioPlayerControlRunnerConfig::save()
     KSharedConfig::Ptr cfg = KSharedConfig::openConfig(QLatin1String("krunnerrc"));
     KConfigGroup grp = cfg->group("Runners");
     grp = KConfigGroup(&grp, "Audio Player Control Runner");
-    if (!m_ui->searchCollection->isEnabled()) {
-        //Another player than Amarok is selected
-        grp.writeEntry(CONFIG_COLLECTION, false);
-    } else {
-        grp.writeEntry(CONFIG_COLLECTION, m_ui->searchCollection->isChecked());
-    }
     grp.writeEntry(CONFIG_COMMANDS,m_ui->commands->isChecked());
     grp.writeEntry(CONFIG_PLAY, m_ui->play_edit->text());
     grp.writeEntry(CONFIG_APPEND, m_ui->append_edit->text());
-    grp.writeEntry(CONFIG_QUEUE, m_ui->queue_edit->text());
     grp.writeEntry(CONFIG_PAUSE, m_ui->pause_edit->text());
     grp.writeEntry(CONFIG_STOP, m_ui->stop_edit->text());
     grp.writeEntry(CONFIG_PREV, m_ui->prev_edit->text());
     grp.writeEntry(CONFIG_NEXT, m_ui->next_edit->text());
-    grp.writeEntry(CONFIG_INCREASE, m_ui->up_edit->text());
-    grp.writeEntry(CONFIG_INCREASE_BY, m_ui->up_value->value());
-    grp.writeEntry(CONFIG_DECREASE, m_ui->down_edit->text());
-    grp.writeEntry(CONFIG_DECREASE_BY, m_ui->down_value->value());
-    grp.writeEntry(CONFIG_MUTE, m_ui->mute_edit->text());
     grp.writeEntry(CONFIG_VOLUME, m_ui->volume_edit->text());
     grp.writeEntry(CONFIG_QUIT, m_ui->quit_edit->text());
     QString data = m_ui->player_combo->itemData(m_ui->player_combo->findText(
@@ -152,19 +125,12 @@ void AudioPlayerControlRunnerConfig::defaults()
 {
     KCModule::defaults();
 
-    m_ui->player_combo->setCurrentIndex(m_ui->player_combo->findData(QLatin1String("amarok")));
-    m_ui->searchCollection->setChecked(true);
+    m_ui->player_combo->setCurrentIndex(m_ui->player_combo->findData(QLatin1String("vlc")));
     m_ui->commands->setChecked(true);
     m_ui->play_edit->setText(i18n("Play"));
     m_ui->append_edit->setText(i18n("Append"));
-    m_ui->queue_edit->setText(i18n("Queue"));
     m_ui->pause_edit->setText(i18n("Pause")) ;
     m_ui->next_edit->setText(i18n("Next"));
-    m_ui->mute_edit->setText(i18n("Mute"));
-    m_ui->up_edit->setText(i18n("Increase"));
-    m_ui->up_value->setValue(15);
-    m_ui->down_edit->setText(i18n("Decrease"));
-    m_ui->down_value->setValue(15);
     m_ui->prev_edit->setText(i18n("Prev"));
     m_ui->stop_edit->setText(i18n("Stop"));
     m_ui->volume_edit->setText(i18n("Volume"));
@@ -172,18 +138,3 @@ void AudioPlayerControlRunnerConfig::defaults()
 
     emit changed(true);
 }
-
-void AudioPlayerControlRunnerConfig::onPlayerChanged(int index)
-{
-    const QString data = m_ui->player_combo->itemData(index).toString();
-    if (data != QLatin1String("amarok")) {
-        m_ui->searchCollection->setEnabled(false);
-    } else {
-        m_ui->searchCollection->setEnabled(true);
-    }
-}
-
-void AudioPlayerControlRunnerConfig::onPlayerChanged(QString player)
-{
-    onPlayerChanged(m_ui->player_combo->findText(player));
-}
index d5f68d2..31a46ef 100644 (file)
@@ -47,10 +47,5 @@ public slots:
 
 private:
     AudioPlayerControlRunnerConfigForm* m_ui;
-
-private slots:
-    /** Is called, if the current index of the player combobox changed */
-    void onPlayerChanged(int index);
-    void onPlayerChanged(QString text);
 };
 #endif // AUDIOPLAYERCONTROLRUNNERCONFIG_H
index 5711fa0..12e0531 100644 (file)
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>452</width>
-    <height>544</height>
+    <height>354</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_3">
         <item>
          <widget class="KComboBox" name="player_combo">
           <property name="toolTip">
-           <string>The collection search is only available for Amarok.
-You may add another player. That player has to support the MPRIS specification.</string>
+           <string>You may add another player. That player has to support the MPRISv2 specification.</string>
           </property>
          </widget>
         </item>
        </layout>
       </item>
       <item>
-       <widget class="QCheckBox" name="searchCollection">
-        <property name="locale">
-         <locale language="English" country="UnitedStates"/>
-        </property>
-        <property name="text">
-         <string>Search &amp;collection</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item>
        <widget class="QGroupBox" name="commands">
         <property name="locale">
          <locale language="English" country="UnitedStates"/>
@@ -137,39 +123,6 @@ You may add another player. That player has to support the MPRIS specification.<
           </layout>
          </item>
          <item>
-          <layout class="QHBoxLayout" name="queue_layout">
-           <item>
-            <widget class="QLabel" name="queue_label">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="text">
-              <string>Q&amp;ueue a song:</string>
-             </property>
-             <property name="buddy">
-              <cstring>queue_edit</cstring>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="KLineEdit" name="queue_edit">
-             <property name="toolTip">
-              <string>Use: queue &lt;term&gt; (where &lt;term&gt; matches to artist, title or album)</string>
-             </property>
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="urlDropsEnabled">
-              <bool>false</bool>
-             </property>
-             <property name="showClearButton" stdset="0">
-              <bool>true</bool>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
           <layout class="QHBoxLayout" name="pause_layout">
            <item>
             <widget class="QLabel" name="pause_label">
@@ -320,7 +273,7 @@ You may add another player. That player has to support the MPRIS specification.<
             <widget class="KLineEdit" name="volume_edit">
              <property name="toolTip">
               <string>The numbers are automatically added at the end:
-Amarok:Volume=10</string>
+Player:Volume=10</string>
              </property>
              <property name="locale">
               <locale language="English" country="UnitedStates"/>
@@ -342,154 +295,6 @@ Amarok:Volume=10</string>
           </layout>
          </item>
          <item>
-          <layout class="QHBoxLayout" name="up_layout">
-           <item>
-            <widget class="QLabel" name="up_label1">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="text">
-              <string>&amp;Increase volume by</string>
-             </property>
-             <property name="buddy">
-              <cstring>up_value</cstring>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="KIntSpinBox" name="up_value">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="maximum">
-              <number>100</number>
-             </property>
-             <property name="value">
-              <number>0</number>
-             </property>
-             <property name="base">
-              <number>10</number>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QLabel" name="up_label2">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="text">
-              <string>:</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="KLineEdit" name="up_edit">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="text">
-              <string/>
-             </property>
-             <property name="urlDropsEnabled">
-              <bool>false</bool>
-             </property>
-             <property name="showClearButton" stdset="0">
-              <bool>true</bool>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="down_layout">
-           <item>
-            <widget class="QLabel" name="down_label1">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="text">
-              <string>&amp;Decrease volume by</string>
-             </property>
-             <property name="buddy">
-              <cstring>down_value</cstring>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="KIntSpinBox" name="down_value">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="maximum">
-              <number>100</number>
-             </property>
-             <property name="value">
-              <number>0</number>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QLabel" name="down_label2">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="text">
-              <string>:</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="KLineEdit" name="down_edit">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="text">
-              <string/>
-             </property>
-             <property name="urlDropsEnabled">
-              <bool>false</bool>
-             </property>
-             <property name="showClearButton" stdset="0">
-              <bool>true</bool>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="mute_layout">
-           <item>
-            <widget class="QLabel" name="mute_label">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="text">
-              <string>&amp;Mute:</string>
-             </property>
-             <property name="buddy">
-              <cstring>mute_edit</cstring>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="KLineEdit" name="mute_edit">
-             <property name="locale">
-              <locale language="English" country="UnitedStates"/>
-             </property>
-             <property name="text">
-              <string/>
-             </property>
-             <property name="urlDropsEnabled">
-              <bool>false</bool>
-             </property>
-             <property name="showClearButton" stdset="0">
-              <bool>true</bool>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
           <layout class="QHBoxLayout" name="quit_layout">
            <item>
             <widget class="QLabel" name="quit_label">
@@ -548,21 +353,14 @@ Amarok:Volume=10</string>
   </customwidget>
  </customwidgets>
  <tabstops>
-  <tabstop>searchCollection</tabstop>
   <tabstop>commands</tabstop>
   <tabstop>play_edit</tabstop>
   <tabstop>append_edit</tabstop>
-  <tabstop>queue_edit</tabstop>
   <tabstop>pause_edit</tabstop>
   <tabstop>stop_edit</tabstop>
   <tabstop>prev_edit</tabstop>
   <tabstop>next_edit</tabstop>
   <tabstop>volume_edit</tabstop>
-  <tabstop>up_value</tabstop>
-  <tabstop>up_edit</tabstop>
-  <tabstop>down_value</tabstop>
-  <tabstop>down_edit</tabstop>
-  <tabstop>mute_edit</tabstop>
   <tabstop>quit_edit</tabstop>
  </tabstops>
  <resources/>
index a3f9b00..12c958e 100644 (file)
@@ -48,51 +48,51 @@ Name[uk]=Керування аудіопрогравачем
 Name[x-test]=xxControl Audio Playerxx
 Name[zh_CN]=控制音乐播放器
 Name[zh_TW]=控制音效播放器
-Comment=Allows to control MPRIS audio players (it is able to search through Amarok's collection, too)
-Comment[ar]=يسمح بالتحكم بمشغل الصوتيات MPRIS (يمكنه أن يبحث في مجموعة أماروك أيضاً)
-Comment[bs]=Dopušta kontroliranje MPRIS audio plejera (može da traži u Amarokovoj kolekciji, također)
-Comment[ca]=Permet controlar reproductors d'àudio MPRIS (també permet cercar a la col·lecció de l'Amarok)
-Comment[ca@valencia]=Permet controlar reproductors d'àudio MPRIS (també permet cercar a la col·lecció de l'Amarok)
-Comment[cs]=Dovoluje ovládání audio přehrávačů MPRIS (je také možné vyhledávat ve sbírce Amarok)
-Comment[da]=Lader dig betjene MPRIS-lydafspillere (den kan også søge i Amaroks samling)
-Comment[de]=Ermöglicht die Steuerung von MPRIS-Medienspielern (und kann zudem die Sammlung von Amarok durchsuchen)
-Comment[el]=Επιτρέπει τον έλεγχο αναπαραγωγέων ήχου MPRIS (μπορεί να ψάξει στη συλλογή του Amarok, επίσης)
-Comment[en_GB]=Allows to control MPRIS audio players (it is able to search through Amarok's collection, too)
-Comment[es]=Permite controlar reproductores de audio MPRIS (también es capaz de buscar en la colección de Amarok)
-Comment[et]=Võimaldab juhtida MPRIS helifailide mängijaid (ning suudab ka otsida Amaroki kogudes)
-Comment[fi]=Mahdollistaa MPRIS-äänisoitinten hallinnan (myös Amarokin kokoelmista voi etsiä)
-Comment[fr]=Permet de contrôler les lecteurs audio « MPRIS » (également capable de chercher dans les collections d'AmaroK)
-Comment[gl]=Permite controlar reprodutores de son de tipo MPRIS. Tamén pode explorar as coleccións de Amarok.
-Comment[hr]=Omogućuje kontrolu MPRIS-svirača zvuka (također je u mogućnosti pretraživati kolekciju u Amaroku)
-Comment[hu]=Lehetővé teszi az MPRIS zenelejátszók vezérlését, valamint képes keresni az Amarok gyűjteményében is
-Comment[it]=Consente di controllare i lettori audio MPRIS (è in grado di cercare anche nella collezione di Amarok)
-Comment[kk]=MPRIS аудиоплейерлерді басқаруға мүмкіндік береді (ол Amarok-тың жиындардық ақтара алады)
-Comment[km]=អនុញ្ញាត​ឲ្យ​ត្រួតពិនិត្យ​កម្មវិធី​ចាក់​អូឌីយ៉ូ MPRIS (វា​អាច​ស្វែងរក​តាមរយៈ​សម្រាំង​របស់ Amarok បាន​ផងដែរ)
-Comment[ko]=MPRIS 오디오 재생기 제어 (Amarok 모음집 검색 기능 포함)
-Comment[lt]=Leidžia valdyti MPRIS audio grotuvus (tai galima ieškoti per Amarok fonetiką taip pat)
-Comment[lv]=Ļauj kontrolēt MPRIS audio atskaņotājus (spēj arī meklēt Amarok kolekcijā)
-Comment[mr]=MPRIS ऑडिओ प्लेयर्स वर नियंत्रण ठेवतो (एमेरोकच्या संग्रहात शोधूही शकतो)
-Comment[nb]=Kan styre MPRIS-lydspillere (det kan også søke gjennom Amaroks samling)
-Comment[nds]=Stüern för MPRIS-Klangafspelers (kann ok Amarok sien Sammeln dörkieken)
-Comment[nl]=Staat toe om MPRIS audiospelers te besturen (kan ook in de verzameling van Amarok zoeken)
-Comment[nn]=Kontroller MPRIS-baserte lydspelarar (òg med støtte for Amarok)
-Comment[pl]=Pozwala sterować odtwarzaczami muzyki MPRIS (możliwe jest również wyszukiwanie w zbiorze Amaroka)
-Comment[pt]=Permite controlar os leitores de áudio MPRIS (também é capaz de percorrer a colecção do Amarok)
-Comment[pt_BR]=Permite controlar os reprodutores de áudio MPRIS (também é capaz de pesquisar a coleção do Amarok)
-Comment[ru]=Позволяет управлять аудиопроигрывателями, совместимыми с MPRIS (поддерживает поиск в коллекции Amarok)
-Comment[sk]=Ovládanie MPRIS audio prehrávačov (je možné tiež hľadať v kolekciách Amaroku)
-Comment[sl]=Omogoča nadzor predvajalnikov zvoka MPRIS (lahko tudi išče po Amarokovih zbirkah)
-Comment[sr]=Управљајте МПРИС аудио плејерима (може да претражује и Амарокову збирку)
-Comment[sr@ijekavian]=Управљајте МПРИС аудио плејерима (може да претражује и Амарокову збирку)
-Comment[sr@ijekavianlatin]=Upravljajte MPRIS audio plejerima (može da pretražuje i Amarokovu zbirku)
-Comment[sr@latin]=Upravljajte MPRIS audio plejerima (može da pretražuje i Amarokovu zbirku)
-Comment[sv]=Gör det möjligt att styra MPRIS-ljudspelare (kan också söka igenom Amaroks samling)
-Comment[th]=ช่วยควบคุมโปรแกรมเล่นเสียง MPRIS (สามารถค้นหาผ่านคลังสื่อของ 'แอมอะร็อก' ได้เช่นกัน)
-Comment[tr]=MPRIS müzik çalarları kontrol etmeyi sağlar (Amarok koleksiyonunda arama yapmayı da sağlar)
-Comment[uk]=Надає змогу керувати аудіопрогравачами стандарту MPRIS (крім того, може здійснювати пошук у збірці Amarok)
-Comment[x-test]=xxAllows to control MPRIS audio players (it is able to search through Amarok's collection, too)xx
-Comment[zh_CN]=让您控制 MPRIS 音乐播放器(还能搜索 Amarok 的收藏)
-Comment[zh_TW]=允許控制 MPRIS 音效播放器(也可以透過 Amarok 的收藏搜尋)
+Comment=Allows to control MPRIS audio player
+Comment[ar]=يسمح بالتحكم بمشغل الصوتيات MPRIS
+Comment[bs]=Dopušta kontroliranje MPRIS audio plejera
+Comment[ca]=Permet controlar reproductors d'àudio MPRIS
+Comment[ca@valencia]=Permet controlar reproductors d'àudio MPRIS
+Comment[cs]=Dovoluje ovládání audio přehrávačů MPRIS
+Comment[da]=Lader dig betjene MPRIS-lydafspillere
+Comment[de]=Ermöglicht die Steuerung von MPRIS-Medienspielern
+Comment[el]=Επιτρέπει τον έλεγχο αναπαραγωγέων ήχου MPRIS
+Comment[en_GB]=Allows to control MPRIS audio players
+Comment[es]=Permite controlar reproductores de audio MPRIS
+Comment[et]=Võimaldab juhtida MPRIS helifailide mängijaid
+Comment[fi]=Mahdollistaa MPRIS-äänisoitinten hallinnan
+Comment[fr]=Permet de contrôler les lecteurs audio « MPRIS »
+Comment[gl]=Permite controlar reprodutores de son de tipo MPRIS
+Comment[hr]=Omogućuje kontrolu MPRIS-svirača zvuka
+Comment[hu]=Lehetővé teszi az MPRIS zenelejátszók vezérlését
+Comment[it]=Consente di controllare i lettori audio MPRIS
+Comment[kk]=MPRIS аудиоплейерлерді басқаруға мүмкіндік береді
+Comment[km]=អនុញ្ញាត​ឲ្យ​ត្រួតពិនិត្យ​កម្មវិធី​ចាក់​អូឌីយ៉ូ MPRIS
+Comment[ko]=MPRIS 오디오 재생기 제어
+Comment[lt]=Leidžia valdyti MPRIS audio grotuvus
+Comment[lv]=Ļauj kontrolēt MPRIS audio atskaņotājus
+Comment[mr]=MPRIS ऑडिओ प्लेयर्स वर नियंत्रण ठेवतो
+Comment[nb]=Kan styre MPRIS-lydspillere
+Comment[nds]=Stüern för MPRIS-Klangafspelers
+Comment[nl]=Staat toe om MPRIS audiospelers te besturen
+Comment[nn]=Kontroller MPRIS-baserte lydspelarar
+Comment[pl]=Pozwala sterować odtwarzaczami muzyki MPRIS
+Comment[pt]=Permite controlar os leitores de áudio MPRIS
+Comment[pt_BR]=Permite controlar os reprodutores de áudio MPRIS
+Comment[ru]=Позволяет управлять аудиопроигрывателями, совместимыми с MPRIS
+Comment[sk]=Ovládanie MPRIS audio prehrávačov
+Comment[sl]=Omogoča nadzor predvajalnikov zvoka MPRIS
+Comment[sr]=Управљајте МПРИС аудио плејерима
+Comment[sr@ijekavian]=Управљајте МПРИС аудио плејерима
+Comment[sr@ijekavianlatin]=Upravljajte MPRIS audio plejerima
+Comment[sr@latin]=Upravljajte MPRIS audio plejerima
+Comment[sv]=Gör det möjligt att styra MPRIS-ljudspelare
+Comment[th]=ช่วยควบคุมโปรแกรมเล่นเสียง MPRIS
+Comment[tr]=MPRIS müzik çalarları kontrol etmeyi sağlar
+Comment[uk]=Надає змогу керувати аудіопрогравачами стандарту MPRIS
+Comment[x-test]=xxAllows to control MPRIS audio playersxx
+Comment[zh_CN]=让您控制 MPRIS 音乐播放器
+Comment[zh_TW]=允許控制 MPRIS 音效播放器
 X-KDE-ServiceTypes=Plasma/Runner
 Type=Service
 Icon=applications-multimedia