Send pause action only if a media is playing !
This commit is contained in:
parent
3a9cc468fa
commit
c97f868ef2
|
@ -5,7 +5,13 @@
|
||||||
# 1. Start Kodi if not already running.
|
# 1. Start Kodi if not already running.
|
||||||
# 2. Send user command to Kodi running instance.
|
# 2. Send user command to Kodi running instance.
|
||||||
#
|
#
|
||||||
# 2022-05-22
|
# In Kodi, pause|play|toggle = TOGGLE ! 😑
|
||||||
|
# So for a real PAUSE, some extra tests are required :
|
||||||
|
# * Request the API (with curl) to check if a playlist is active.
|
||||||
|
# * Request the API to get the media speed.
|
||||||
|
# * Exit if the media is already paused (speed = 0).
|
||||||
|
#
|
||||||
|
# 2022-07-04
|
||||||
# }}}
|
# }}}
|
||||||
# Vars {{{
|
# Vars {{{
|
||||||
PROGNAME=$(basename "${0}"); readonly PROGNAME
|
PROGNAME=$(basename "${0}"); readonly PROGNAME
|
||||||
|
@ -54,7 +60,8 @@ EXAMPLES :
|
||||||
OPTIONS :
|
OPTIONS :
|
||||||
-c,--command
|
-c,--command
|
||||||
Send a command to running Kodi. Available commands :
|
Send a command to running Kodi. Available commands :
|
||||||
* toggle, play, pause
|
* toggle, play
|
||||||
|
* pause (real one thanks to the API and curl!)
|
||||||
* stop
|
* stop
|
||||||
* next
|
* next
|
||||||
* previous
|
* previous
|
||||||
|
@ -120,9 +127,12 @@ define_vars() { # {{{
|
||||||
## }}}
|
## }}}
|
||||||
## Translate user command to Kodi action {{{
|
## Translate user command to Kodi action {{{
|
||||||
case "${USER_MULTIMEDIA_COMMAND}" in
|
case "${USER_MULTIMEDIA_COMMAND}" in
|
||||||
toggle|play|pause ) ## Toggle current play
|
toggle|play ) ## Toggle current play
|
||||||
KODI_ACTION="PlayerControl(play)"
|
KODI_ACTION="PlayerControl(play)"
|
||||||
;;
|
;;
|
||||||
|
pause ) ## Pause current media if anything is playing
|
||||||
|
KODI_ACTION="PlayerControl(pause)"
|
||||||
|
;;
|
||||||
stop ) ## Stop current play
|
stop ) ## Stop current play
|
||||||
KODI_ACTION="PlayerControl(stop)"
|
KODI_ACTION="PlayerControl(stop)"
|
||||||
;;
|
;;
|
||||||
|
@ -146,7 +156,7 @@ define_vars() { # {{{
|
||||||
|
|
||||||
}
|
}
|
||||||
# }}}
|
# }}}
|
||||||
is_proc_absent() { # {{{
|
is_proc_absent() { # {{{
|
||||||
|
|
||||||
local_proc_pattern="${1}"
|
local_proc_pattern="${1}"
|
||||||
|
|
||||||
|
@ -172,6 +182,43 @@ procs running (with the pattern: ${RED}${local_proc_pattern}${COLOR_DEBUG}) on t
|
||||||
|
|
||||||
}
|
}
|
||||||
# }}}
|
# }}}
|
||||||
|
get_current_media_type() { # {{{
|
||||||
|
|
||||||
|
debug_message "get_current_media_type − \
|
||||||
|
Run a request to ${KODI_HOST}:${KODI_PORT} API :"
|
||||||
|
|
||||||
|
KODI_CURRENT_MEDIA_TYPE=$(curl -s -X POST http://"${KODI_HOST}:${KODI_PORT}"/jsonrpc -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"Player.GetActivePlayers","id":0}' | sed -n 's/.*"type":"\(.*\)".*/\1/p')
|
||||||
|
}
|
||||||
|
# }}}
|
||||||
|
is_audio_paused() { # {{{
|
||||||
|
|
||||||
|
## Media is playing by default
|
||||||
|
return_is_audio_paused="1"
|
||||||
|
|
||||||
|
debug_message "is_audio_paused − \
|
||||||
|
Run a request to ${KODI_HOST}:${KODI_PORT} API to get status of audio media."
|
||||||
|
|
||||||
|
KODI_CURRENT_AUDIO_SPEED=$(curl -s -X POST http://"${KODI_HOST}:${KODI_PORT}"/jsonrpc -H 'Content-Type: application/json' --data '{"jsonrpc": "2.0", "method": "Player.GetProperties", "params": { "playerid": 0, "properties": [ "speed" ] }, "id": "AudioGetItem" }' | sed -n 's/.*"speed":\(.\).*/\1/p')
|
||||||
|
|
||||||
|
case "${KODI_CURRENT_AUDIO_SPEED}" in
|
||||||
|
0 ) ## Media is paused
|
||||||
|
debug_message "is_audio_paused − \
|
||||||
|
The current media is paused (speed: ${RED}${KODI_CURRENT_MEDIA_TYPE}${COLOR_DEBUG})."
|
||||||
|
return_is_audio_paused="0"
|
||||||
|
;;
|
||||||
|
1 ) ## Media is playing
|
||||||
|
debug_message "is_audio_paused − \
|
||||||
|
The current media is playing (speed: ${RED}${KODI_CURRENT_MEDIA_TYPE}${COLOR_DEBUG})."
|
||||||
|
return_is_audio_paused="1"
|
||||||
|
;;
|
||||||
|
* ) ## Error getting current media speed
|
||||||
|
error_message "Error with media speed (${KODI_CURRENT_AUDIO_SPEED})." 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return "${return_is_audio_paused}"
|
||||||
|
}
|
||||||
|
# }}}
|
||||||
|
|
||||||
main() { # {{{
|
main() { # {{{
|
||||||
|
|
||||||
|
@ -187,6 +234,28 @@ main() { # {{{
|
||||||
&& exit 0
|
&& exit 0
|
||||||
## }}}
|
## }}}
|
||||||
|
|
||||||
|
## If the media should be paused {{{
|
||||||
|
if [ "${USER_MULTIMEDIA_COMMAND}" = "pause" ]; then
|
||||||
|
## Get current playlist type
|
||||||
|
get_current_media_type
|
||||||
|
case "${KODI_CURRENT_MEDIA_TYPE}" in
|
||||||
|
audio ) ## Manage audio media
|
||||||
|
is_audio_paused \
|
||||||
|
&& debug_message "${RED}audio${COLOR_DEBUG} media is already paused, no more action is required." \
|
||||||
|
&& exit 0
|
||||||
|
;;
|
||||||
|
video ) ## Manage video media
|
||||||
|
debug_message "${RED}video${COLOR_DEBUG} type for current media is not yet managed."
|
||||||
|
;;
|
||||||
|
* ) ## Unknown media type or no media at all
|
||||||
|
debug_message "Unknown media type ->${RED}${KODI_CURRENT_MEDIA_TYPE}${COLOR_DEBUG}<- or no media is playing (if empty), exit."
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
fi
|
||||||
|
## }}}
|
||||||
|
|
||||||
## Send Kodi action to running instance {{{
|
## Send Kodi action to running instance {{{
|
||||||
### And exit
|
### And exit
|
||||||
debug_message "Send ${RED}${USER_MULTIMEDIA_COMMAND}${COLOR_DEBUG} (${RED}${KODI_ACTION}${COLOR_DEBUG}) action to running Kodi instance (on ${RED}${KODI_HOST}${COLOR_DEBUG} host)." \
|
debug_message "Send ${RED}${USER_MULTIMEDIA_COMMAND}${COLOR_DEBUG} (${RED}${KODI_ACTION}${COLOR_DEBUG}) action to running Kodi instance (on ${RED}${KODI_HOST}${COLOR_DEBUG} host)." \
|
||||||
|
|
Loading…
Reference in New Issue