aboutsummaryrefslogtreecommitdiffstats
path: root/functions/bass.fish
diff options
context:
space:
mode:
Diffstat (limited to 'functions/bass.fish')
-rw-r--r--functions/bass.fish95
1 files changed, 95 insertions, 0 deletions
diff --git a/functions/bass.fish b/functions/bass.fish
new file mode 100644
index 0000000..dee4074
--- /dev/null
+++ b/functions/bass.fish
@@ -0,0 +1,95 @@
+function bass
+ switch "$argv[1]"
+ case search find
+ __bass_print (__bass_mpc $argv)
+ case id
+ __bass_mbid $argv
+ case browse
+ __bass_browse $argv
+ case love
+ mpc sendmessage listenbrainz_feedback love
+ case hate
+ mpc sendmessage listenbrainz_feedback hate
+ case ""
+ __bass_print -p (__bass_mpc playlist)
+ case "*"
+ mpc $argv
+ end
+end
+
+function __bass_print
+ argparse "p/playlist" -- $argv
+ or return 1
+
+ for line in $argv
+ set -l data (string split \t $line)
+ set -l artist (__bass_trim $data[1])
+ set -l album (__bass_trim $data[2])
+ set -l title (__bass_trim $data[3])
+ set -l file $data[4]
+ set -l position $data[5]
+
+ if not isatty stdout
+ echo $file
+ else if set -q _flag_playlist
+ set -l current (mpc -f "%position%" current)
+
+ if test "$position" = "$current"
+ echo -n "▶ "
+ else
+ echo -n " "
+ end
+
+ __bass_print_track $title $artist $album
+ else
+ __bass_print_track $title $artist $album
+ end
+ end
+end
+
+function __bass_trim
+ set -l length (string length $argv[1])
+ if test $length -gt 39
+ echo (string sub --length 39 $argv[1])…
+ else
+ echo $argv[1]
+ end
+end
+
+function __bass_print_track
+ set_color blue
+ echo -n $argv[1]
+ set_color normal
+ echo " ꞏ $argv[2] ꞏ $argv[3]"
+end
+
+function __bass_mpc
+ set -l format "%artist%\t%album%\t%title%\t%file%\t%position%"
+ mpc -f $format $argv
+end
+
+function __bass_browse
+ argparse "a/album" "o/open" -- $argv
+ or return 1
+
+ set -l id (__bass_mbid $_flag_album)
+ or return 1
+
+ beet browse $_flag_album $_flag_open $id
+end
+
+function __bass_mbid
+ argparse "a/album" -- $argv
+ or return 1
+
+ set -l ids (string split \t (mpc -f "%musicbrainz_trackid%\t%musicbrainz_albumid%" current))
+ if test $status -ne 0
+ return 1
+ end
+
+ if not set -q _flag_album
+ echo "mb_trackid:$ids[1]"
+ else
+ echo "mb_albumid:$ids[2]"
+ end
+end