-
This commit is contained in:
35
playlist.rkt
35
playlist.rkt
@@ -3,6 +3,8 @@
|
||||
(require racket/class
|
||||
"music-library.rkt"
|
||||
racket-sound
|
||||
"utils.rkt"
|
||||
racket-sprintf
|
||||
)
|
||||
|
||||
(provide track%
|
||||
@@ -65,7 +67,7 @@
|
||||
(and (<= (list-len tracks) max-tracks)
|
||||
(is-music-file? file)))
|
||||
|
||||
(define (add-track file)
|
||||
(define (add-track* file)
|
||||
(let ((track (new track% [file file])))
|
||||
(set! tracks (append tracks (list track)))))
|
||||
|
||||
@@ -83,7 +85,7 @@
|
||||
(if (directory-exists? p)
|
||||
(read-tracks-internal p)
|
||||
(when (and (file-exists? p) (can-add? p))
|
||||
(add-track p)))))
|
||||
(add-track* p)))))
|
||||
content))
|
||||
'no-file-or-dir
|
||||
)
|
||||
@@ -99,6 +101,9 @@
|
||||
(define/public (length)
|
||||
(list-len tracks))
|
||||
|
||||
(define/public (add-track file)
|
||||
(add-track* file))
|
||||
|
||||
(define/public (track i)
|
||||
(list-ref tracks i))
|
||||
|
||||
@@ -107,6 +112,32 @@
|
||||
(send track displayln))
|
||||
tracks))
|
||||
|
||||
(define/public (to-html)
|
||||
(define (formatter row)
|
||||
(let* ((track-idx (car row))
|
||||
(track (track track-idx)))
|
||||
(list
|
||||
(list 'td (list (list 'class "number"))
|
||||
(format "~a." (send track get-number)))
|
||||
(list 'td (list (list 'class "title"))
|
||||
(send track get-title))
|
||||
(list 'td (list (list 'class "album"))
|
||||
(send track get-album))
|
||||
(list 'td (list (list 'class "length"))
|
||||
(let* ((length-s (send track get-length))
|
||||
(hour (quotient length-s 3600))
|
||||
(min (quotient (remainder length-s 3600) 60))
|
||||
(sec (remainder (remainder length-s 3600) 60)))
|
||||
(sprintf "%02d:%02d:%02d" hour min sec)))
|
||||
)))
|
||||
|
||||
(letrec ((f (λ (i N)
|
||||
(if (< i N)
|
||||
(cons (list (format "track-~a" (+ i 1)) i) (f (+ i 1) N))
|
||||
'()))))
|
||||
(let ((rows (f 0 (send this length))))
|
||||
(mktable rows 'tracks formatter))))
|
||||
|
||||
(super-new)
|
||||
(begin
|
||||
(when (eq? start-map #f)
|
||||
|
||||
Reference in New Issue
Block a user