scripts

scripts
git clone git://git.wimdupont.com/scripts.git
Log | Files | Refs | README | LICENSE

mpvpop (2654B)


      1 #!/bin/bash
      2 
      3 shopt -s nullglob
      4 
      5 readonly SOCKET='/tmp/mpvsocket'
      6 
      7 help_msg() {
      8 	echo "
      9   Usage:
     10 	${PROGRAM} info	
     11 		Show track info
     12 	${PROGRAM} volume
     13 		Show current track volume or change it by passing value as argument (negative to lower)
     14 	${PROGRAM} pause
     15 		Pause/unpause current track
     16 	${PROGRAM} stop
     17 		Stop track/playlist
     18 	${PROGRAM} next
     19 		Play next in playlist
     20 	${PROGRAM} previous
     21 		Play previous in playlist
     22 	${PROGRAM} help
     23 		Show this help menu
     24 "
     25 }
     26 
     27 trim() {
     28 	echo $1 | sed -re 's/^[[:blank:]]+|[[:blank:]]+$//g'
     29 }
     30 
     31 mpv_property_data() {
     32 	printf '{ "command": ["get_property", "%s"] }\n' "$1" | socat - "${SOCKET}" | jq -r ".data" 2> /dev/null
     33 }
     34 
     35 mpv_metadata() {
     36 	local -r METADATA=($(mpv_property_data "metadata"))
     37 	local -r KEYS=$(echo -n "${METADATA[*]}" | jq -r "keys[]" 2> /dev/null)
     38 
     39 	if [[ "${KEYS[@]}" =~ 'icy-title' ]]; then
     40 		local -r RESULTDATA=$(echo "${METADATA[*]}" | jq -r '."icy-title"')
     41 		# split by divider
     42 		IFS=$'-' data=(${RESULTDATA})
     43 		# print with newline splitter
     44 		printf "%s\n" "${data[@]}"
     45 	elif [[ "${KEYS[@]}" =~ 'title' ]]; then
     46 		echo "${METADATA[*]}" | jq -r '.artist,.title'
     47 	else
     48 		local -r FILENAME=$(mpv_property_data "filename")
     49 		# Remove extension
     50 		# print with newline splitter
     51 		printf "%s\n%s" "Track" "${FILENAME%.*}"
     52 	fi
     53 }
     54 
     55 mpv_filename() {
     56 	local -r FILENAME=$(mpv_property_data "filename")
     57 	# Remove extension
     58 	echo "${FILENAME%.*}"
     59 }
     60 
     61 track_info() {
     62 	local -r METADATA="$(mpv_metadata)"
     63 	
     64 	# split by newline
     65 	IFS=$'\n' data=(${METADATA[*]})
     66 	
     67 	dunstify -h string:x-dunst-stack-tag:track-info $(trim "${data[0]}") $(trim "${data[1]}" )
     68 }
     69 
     70 track_volume() {
     71 	test ! -z $1 && echo add volume $1 | socat - "${SOCKET}"
     72 	dunstify -h string:x-dunst-stack-tag:track-volume "Track Volume": $(mpv_property_data "volume")
     73 }
     74 
     75 track_pause() {
     76 	echo cycle pause | socat - "${SOCKET}"
     77 	dunstify -h string:x-dunst-stack-tag:track-pause "Track cycle pause"
     78 }
     79 
     80 track_stop() {
     81 	echo stop | socat - "${SOCKET}"
     82 	dunstify -h string:x-dunst-stack-tag:track-stop "Track stopped"
     83 }
     84 
     85 track_next() {
     86 	echo playlist-next | socat - "${SOCKET}"
     87 	sleep 0.5
     88 	track_info
     89 }
     90 
     91 track_prev() {
     92 	echo playlist-prev | socat - "${SOCKET}"
     93 	sleep 0.5
     94 	track_info
     95 }
     96 
     97 readonly PROGRAM="${0##*/}"
     98 readonly COMMAND="$1"
     99 
    100 case "$1" in
    101 	help|--help) shift;				help_msg ;;
    102 	info|--info) shift;				track_info ;;
    103 	volume|--volume) shift;				track_volume "$@" ;;
    104 	pause|--pause) shift;				track_pause ;;
    105 	stop|--stop) shift;				track_stop ;;
    106 	next|--next) shift;				track_next ;;
    107 	previous|--previous|prev|--prev) shift;		track_prev ;;
    108 	*)						notify-send "Unknown option" "Valid arg is required. --help for available options" ;;
    109 esac
    110 exit 0