From 866260f47cfce6e7abb5ca12d2933335c11eca0a Mon Sep 17 00:00:00 2001 From: "NF @ nf-nph-F-02-1" Date: Sun, 9 Dec 2018 19:35:19 +0000 Subject: [PATCH] Added dbus method SetLoop to switch looping on / off by dbus. --- KeyConfig.h | 1 + OMXControl.cpp | 22 ++++++++++++++++++++++ dbuscontrol.sh | 4 ++++ omxplayer.cpp | 3 +++ 4 files changed, 30 insertions(+) diff --git a/KeyConfig.h b/KeyConfig.h index e90a2ea6..93a9b70a 100644 --- a/KeyConfig.h +++ b/KeyConfig.h @@ -45,6 +45,7 @@ class KeyConfig ACTION_PLAY = 36, ACTION_CHANGE_FILE = 37, ACTION_SET_LAYER = 38, + ACTION_SET_LOOP = 39, }; #define KEY_LEFT 0x5b44 diff --git a/OMXControl.cpp b/OMXControl.cpp index 7345d8b2..ccb9e8a7 100644 --- a/OMXControl.cpp +++ b/OMXControl.cpp @@ -853,6 +853,28 @@ OMXControlResult OMXControl::handle_event(DBusMessage *m) return OMXControlResult(KeyConfig::ACTION_SEEK_ABSOLUTE, position); } } + else if (dbus_message_is_method_call(m, OMXPLAYER_DBUS_INTERFACE_PLAYER, "SetLoop")) + { + DBusError error; + dbus_error_init(&error); + + bool should_loop; + dbus_message_get_args(m, &error, DBUS_TYPE_BOOLEAN, &should_loop, DBUS_TYPE_INVALID); + + // Make sure a value is sent for setting layer + if (dbus_error_is_set(&error)) + { + CLog::Log(LOGWARNING, "SetLoop D-Bus Error: %s", error.message ); + dbus_error_free(&error); + dbus_respond_ok(m); + return KeyConfig::ACTION_BLANK; + } + else + { + dbus_respond_ok(m); + return OMXControlResult(KeyConfig::ACTION_SET_LOOP, should_loop); + } + } else if (dbus_message_is_method_call(m, OMXPLAYER_DBUS_INTERFACE_PLAYER, "SetAlpha")) { DBusError error; diff --git a/dbuscontrol.sh b/dbuscontrol.sh index f88a5a8b..7708f398 100755 --- a/dbuscontrol.sh +++ b/dbuscontrol.sh @@ -53,6 +53,10 @@ seek) dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek int64:$2 >/dev/null ;; +setloop) + dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.SetLoop boolean:$2 >/dev/null + ;; + setposition) dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.SetPosition objpath:/not/used int64:$2 >/dev/null ;; diff --git a/omxplayer.cpp b/omxplayer.cpp index 0d4ab5e5..e4120621 100644 --- a/omxplayer.cpp +++ b/omxplayer.cpp @@ -1447,6 +1447,9 @@ int main(int argc, char *argv[]) case KeyConfig::ACTION_SET_LAYER: m_player_video.SetLayer(result.getArg()); break; + case KeyConfig::ACTION_SET_LOOP: + m_loop=result.getArg(); + break; case KeyConfig::ACTION_PLAY: m_Pause=false; if(m_has_subtitle)