speed up nav2beet, 8 mins to 1 min
[distro-setup] / beets-gen-playlists
1 #!/bin/bash
2
3 # for generating playlist config yaml.
4 # plain playlists are added manually to the yaml.
5
6 f=/usr/local/lib/err;test -r $f || { echo "error: $0 no $f" >&2;exit 1;}; . $f
7
8 declare -A ignore_genres_a
9 ignore_genres=(
10 skit
11 spoken-w
12 )
13
14 declare -A slow_genres_a
15 slow_genres=(
16 ambient
17 avant
18 classical
19 noise
20 sleep
21 mq
22 jazz
23 )
24
25
26 tags=(
27 expl
28 sad
29 )
30
31
32 for g in ${ignore_genres[@]}; do
33 ignore_genres_a[$g]=t
34 done
35 for g in ${slow_genres[@]}; do
36 slow_genres_a[$g]=t
37 done
38
39 # genres that have a beat
40 beat_genres=()
41
42 # generate genres based on what is in the db.
43 genres=()
44
45 # relatively upbeat genres to listen, eg while biking
46 upbeat_genres=()
47 for g in $(beet ls -f '$genre' | sort -u); do
48 if [[ ${ignore_genres_a[$g]} ]]; then continue; fi
49 genres+=($g)
50 if [[ ${slow_genres_a[$g]} ]]; then continue; fi
51 beat_genres+=($g)
52 case $g in
53 chill)
54 continue
55 ;;
56 esac
57 upbeat_genres+=($g)
58 done
59
60 # generate regex for beat playlist
61 beat_regex=
62 first=true
63 for g in ${beat_genres[@]}; do
64 if $first; then
65 first=false
66 beat_regex=$g
67 else
68 beat_regex+="|$g"
69 fi
70 done
71
72 # generate regex for upbeat playlist
73 beat_regex=
74 first=true
75 for g in ${upbeat_genres[@]}; do
76 if $first; then
77 first=false
78 upbeat_regex=$g
79 else
80 upbeat_regex+="|$g"
81 fi
82 done
83
84
85 for g in ${genres[@]}; do
86 for r in {3..5}; do
87 case $g in
88 pop|rap)
89 cat <<EOF
90 - name: ${g}-${r}.m3u
91 query: 'rating:${r}..5 genre::^$g\$ ^expl:t ^gimicky:t ^lesser_version:t'
92 - name: ${g}-x-${r}.m3u
93 query: 'rating:${r}..5 genre::^$g\$ ^gimicky:t ^lesser_version:t'
94 EOF
95 ;;
96 *)
97 cat <<EOF
98 - name: ${g}-${r}.m3u
99 query: 'rating:${r}..5 genre:$g ^gimicky:t ^lesser_version:t'
100 EOF
101 ;;
102 esac
103 done
104 done
105
106 for t in ${tags[@]}; do
107 for r in {3..5}; do
108 cat <<EOF
109 - name: ${t}-${r}.m3u
110 query: 'rating:${r}..5 $t:t ^lesser_version:t'
111 EOF
112
113 done
114 done
115
116 for r in {3..5}; do
117 cat <<EOF
118 - name: beat-${r}.m3u
119 query: 'rating:${r}..5 genre::$beat_regex ^expl:t ^gimicky:t ^lesser_version:t'
120 - name: beat-x-${r}.m3u
121 query: 'rating:${r}..5 genre::$beat_regex ^gimicky:t ^lesser_version:t'
122 - name: upbeat-${r}.m3u
123 query: 'rating:${r}..5 genre::$upbeat_regex ^expl:t ^gimicky:t ^lesser_version:t ^sad:t'
124 - name: upbeat-x-${r}.m3u
125 query: 'rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t ^sad:t'
126 - name: gimicky-${r}.m3u
127 query: 'rating:${r}..5 gimicky:t ^lesser_version:t'
128 EOF
129 done