mc - localbin - leot's localbin (~/bin)
 (HTM) hg clone https://bitbucket.org/iamleot/localbin
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       mc
       ---
            1 #!/bin/sh
            2 
            3 LYRICS_CMD=$(which lyrics)
            4 
            5 mpv_socket=`sockstat -u | awk '$2 == "mpv" { print $6; exit; }'`
            6 
            7 next() {
            8         pcur=`{ echo '{ "command": ["get_property", "playlist-pos"] }' | socat - $mpv_socket | jq '.data'; } 2>/dev/null`
            9         pnext=`expr "$pcur" + 1`
           10         { echo '{ "command": ["set_property", "playlist-pos", '"$pnext"' ] }' | socat - $mpv_socket ; } >/dev/null 2>&1
           11 }
           12 
           13 prev() {
           14         pcur=`{ echo '{ "command": ["get_property", "playlist-pos"] }' | socat - $mpv_socket | jq '.data'; } 2>/dev/null`
           15         pprev=`expr "$pcur" - 1`
           16         { echo '{ "command": ["set_property", "playlist-pos", '"$pprev"' ] }' | socat - $mpv_socket ; } >/dev/null 2>&1
           17 }
           18 
           19 pause() {
           20         { echo '{ "command": ["set_property", "pause", true ] }' | socat - $mpv_socket ; } >/dev/null 2>&1
           21 }
           22 
           23 play() {
           24         { echo '{ "command": ["set_property", "pause", false ] }' | socat - $mpv_socket ; } >/dev/null 2>&1
           25 }
           26 
           27 #
           28 # FIXME: This is slooooow! If we can avoid all the socat invocation probably it
           29 # FIXME: will be faster.
           30 #
           31 status() {
           32         media_title=`{ echo '{ "command": ["get_property", "media-title"] }' | socat - $mpv_socket | jq -r '.data' ; } 2> /dev/null`
           33         track=`{ echo '{ "command": ["get_property", "metadata/by-key/track"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
           34         track=${track%%/*}      # Get rid of possible `/<n>'
           35         artist=`{ echo '{ "command": ["get_property", "metadata/by-key/artist"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
           36         title=`{ echo '{ "command": ["get_property", "metadata/by-key/title"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
           37         album=`{ echo '{ "command": ["get_property", "metadata/by-key/album"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
           38 
           39         chapter=`{ echo '{ "command": ["get_property", "chapter"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
           40         chapter_title=`{ echo '{ "command": ["get_property", "chapter-list/'"${chapter}"'/"] }' | socat - $mpv_socket | jq -r '.data.title'; } 2> /dev/null`
           41 
           42         if [ "$track" != "null" ]; then
           43                 printf "[%02d] " "$track"
           44         elif [ "$chapter" != "null" ]; then
           45                 printf "[%02d] " "$((chapter + 1))"
           46         fi
           47         if [ "$title" != "null" ] && [ "$artist" != "null" ]; then
           48                 printf "%s - %s " "$artist" "$title"
           49         elif [ "$title" != "null" ]; then
           50                 printf "%s " "$title"
           51         elif [ "$chapter_title" != "null" ]; then
           52                 printf "%s " "$chapter_title"
           53         elif [ "$media_title" != "null" ]; then
           54                 printf "%s " "$media_title"
           55         fi
           56         [ "$album" != "null" ] && printf "(%s) " "$album"
           57         printf "\n"
           58 }
           59 
           60 lyrics() {
           61         artist=`{ echo '{ "command": ["get_property", "metadata/by-key/artist"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
           62         title=`{ echo '{ "command": ["get_property", "metadata/by-key/title"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
           63 
           64         if [ "$title" != "null" ] && [ "$artist" != "null" ]; then
           65                 ${LYRICS_CMD} "$artist" "$title"
           66         fi
           67 }
           68 
           69 running() {
           70         if [ ! -S "${mpv_socket}" ]; then
           71                 exit 2
           72         fi
           73 }
           74 
           75 usage() {
           76         echo 'usage: mc next|pause|play|prev|status'
           77         exit 1
           78 }
           79 
           80 # check that mpv is running
           81 running
           82 
           83 case "$1" in
           84         n|next)
           85                 next
           86                 ;;
           87         pa|pause)
           88                 pause
           89                 ;;
           90         pl|play)
           91                 play
           92                 ;;
           93         p|prev)
           94                 prev
           95                 ;;
           96         s|status)
           97                 status
           98                 ;;
           99         l|lyrics)
          100                 lyrics
          101                 ;;
          102         *)
          103                 usage
          104                 ;;
          105 esac