aboutsummaryrefslogtreecommitdiffstats
path: root/functions/bass.fish
blob: dee407437041390dba6a71cf0f1d65b1e470d743 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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