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