diff --git a/build_scripts/qt/sources.pri b/build_scripts/qt/sources.pri index 61301a1..91a04e0 100644 --- a/build_scripts/qt/sources.pri +++ b/build_scripts/qt/sources.pri @@ -68,8 +68,15 @@ unix:!macx { SOURCES += src/keyboard_input/input_sender_dummy.cpp } - SOURCES += src/tabcontrollers/audiomanager/AudioManagerDummy.cpp \ - src/media_keys/media_keys_dummy.cpp + !noDBUS { + SOURCES += src/media_keys/media_keys_dbus.cpp + QT += dbus + } + else { + SOURCES += src/media_keys/media_keys_dummy.cpp + } + + SOURCES += src/tabcontrollers/audiomanager/AudioManagerDummy.cpp HEADERS += src/tabcontrollers/audiomanager/AudioManagerDummy.h } diff --git a/src/media_keys/media_keys.h b/src/media_keys/media_keys.h index 00b0768..e83f135 100644 --- a/src/media_keys/media_keys.h +++ b/src/media_keys/media_keys.h @@ -1,5 +1,5 @@ #pragma once - +#include #include #include diff --git a/src/media_keys/media_keys_dbus.cpp b/src/media_keys/media_keys_dbus.cpp new file mode 100644 index 0000000..fc1eeb6 --- /dev/null +++ b/src/media_keys/media_keys_dbus.cpp @@ -0,0 +1,59 @@ +#include "media_keys.h" +#include +#include +#include +#include + +namespace keyboardinput +{ +void callMethodForAllMediaPlayerAvailableServices( const QString& method ) +{ + if ( !QDBusConnection::sessionBus().isConnected() ) + { + LOG( ERROR ) << "Media Keys: Unable to connect to DBUS session bus."; + return; + } + + QDBusReply names + = QDBusConnection::sessionBus().interface()->registeredServiceNames(); + if ( !names.isValid() ) + { + LOG( ERROR ) + << "Media Keys: Error getting DBUS registered service names:"; + LOG( ERROR ) << names.error().message(); + } + + foreach ( QString name, names.value() ) + { + if ( name.contains( "org.mpris.MediaPlayer2" ) ) + { + QDBusInterface iface( name, + "/org/mpris/MediaPlayer2", + "org.mpris.MediaPlayer2.Player", + QDBusConnection::sessionBus() ); + iface.call( method ); + } + } +} + +void sendMediaNextSong() +{ + callMethodForAllMediaPlayerAvailableServices( "Next" ); +} + +void sendMediaPreviousSong() +{ + callMethodForAllMediaPlayerAvailableServices( "Previous" ); +} + +void sendMediaPausePlay() +{ + callMethodForAllMediaPlayerAvailableServices( "PlayPause" ); +} + +void sendMediaStopSong() +{ + callMethodForAllMediaPlayerAvailableServices( "Stop" ); +} + +} // namespace keyboardinput