summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xmpd-random-albums7
-rw-r--r--mpd.scm22
2 files changed, 26 insertions, 3 deletions
diff --git a/mpd-random-albums b/mpd-random-albums
index 4bcd680..50e6f79 100755
--- a/mpd-random-albums
+++ b/mpd-random-albums
@@ -1,7 +1,7 @@
#!/usr/bin/env sh
# -*- mode: scheme; -*-
IFS=" "
-exec scsh -s "$0" "$@"
+exec scsh -ll mpd.scm -o mpd -s "$0" "$@"
!#
(define (randomize-all-albums)
@@ -12,8 +12,9 @@ exec scsh -s "$0" "$@"
(define (randomize-albums-by-artist artist)
(for-each (lambda (album)
- (display (run/string (mpc findadd ,(string-append "((artist == \"" artist "\") AND (album == \"" album "\"))")))))
- (run/strings (pipe (mpc list album ,(string-append "((artist == \"" artist "\"))"))
+ (run (mpc findadd ,(query (and (= artist ,artist)
+ (= album ,album))))))
+ (run/strings (pipe (mpc list album ,(query (= artist ,artist)))
(shuf)))))
(run (mpc clear)
diff --git a/mpd.scm b/mpd.scm
new file mode 100644
index 0000000..74d297b
--- /dev/null
+++ b/mpd.scm
@@ -0,0 +1,22 @@
+(define-structure mpd (export query)
+ (open scheme-with-scsh)
+ (begin
+ (define-syntax query
+ (syntax-rules ()
+ ((_ a)
+ (mpd-query-1 `a))))
+
+ (define (mpd-query-equals params)
+ (apply format #f "~s == ~s" params))
+
+ (define (mpd-query-and params)
+ (format #f "~a AND ~a"
+ (mpd-query-1 (car params))
+ (mpd-query-1 (cadr params))))
+
+ (define (mpd-query-1 query)
+ (format #f "(~a)"
+ (let ((op (car query)))
+ (case op
+ ('= (mpd-query-equals (cdr query)))
+ ('and (mpd-query-and (cdr query)))))))))