diff --git a/gui.rkt b/gui.rkt index 0e49d71..2d4c3cc 100644 --- a/gui.rkt +++ b/gui.rkt @@ -50,9 +50,11 @@ (define current-at-seconds 0) (define current-length-seconds 0) + (define (update-time at-seconds length-seconds) (let ((as (inexact->exact (round at-seconds))) (ls (inexact->exact (round length-seconds)))) + (when (or (not (= current-at-seconds as)) (not (= current-length-seconds ls))) (set! current-at-seconds as) @@ -67,15 +69,12 @@ (remainder (remainder ls 3600) 60))) ) (unless closed - (displayln "Updating time widgets") (send el-at set-inner-html! as-str) (send el-length set-inner-html! ls-str) (let ((seeker (if (= ls 0) 0.0 (exact->inexact (/ (* 100 as) ls))))) - ;(displayln (format "seeker = ~a" seeker)) (send el-seeker set! (format "~a" seeker))) - (displayln "done") ) ) ) @@ -84,37 +83,44 @@ (define current-track-nr #f) (define (update-track-nr nr) - (displayln (format "update-track-nr ~a" nr)) - (let ((id (λ () (send playlist track-id current-track-nr))) ;string->symbol (format "track-~a" (+ current-track-nr 1))))) - (ct current-track-nr)) + (unless (eq? playlist #f) + (displayln (format "update-track-nr ~a" nr)) + (let ((id (λ () (send playlist track-id current-track-nr))) ;string->symbol (format "track-~a" (+ current-track-nr 1))))) + (ct current-track-nr)) - (displayln "Removing current") - (unless (eq? current-track-nr #f) - (displayln (format "current old track: ~a" (id))) - (let ((el (send this element (id)))) - (send el remove-class! "current"))) + (displayln "Removing current") + (unless (eq? current-track-nr #f) + (displayln (format "current old track: ~a" (id))) + (let ((el (send this element (id)))) + (send el remove-class! "current"))) - (set! current-track-nr nr) + (set! current-track-nr nr) - (displayln "Adding current") - (unless (eq? current-track-nr #f) - (displayln (format "current new track: ~a" (id))) - (let ((el (send this element (id)))) - (send el add-class! "current")) + (displayln "Adding current") + (unless (eq? current-track-nr #f) + (displayln (format "current new track: ~a" (id))) + (let ((el (send this element (id)))) + (send el add-class! "current")) - (displayln "Getting cover image") - (let* ((track (send playlist track current-track-nr)) - (img-file "/tmp/cover-image") - (stored-file (send track image->file img-file)) + (displayln "Getting cover image") + (let* ((track (send playlist track current-track-nr)) + (img-file (if (eq? (system-type 'os) 'windows) + "c:/tmp/cover-image" + "/tmp/cover-image")) + (stored-file (send track image->file img-file)) ) - (unless (eq? stored-file #f) - (let ((el (send this element 'album-art))) - (let ((html (format "" stored-file))) - (send el set-inner-html! html)))) - ;(send el set-attr! 'src stored-file)))) + (displayln (format "image mimetype: ~a" (send track image->mimetype))) + (unless (eq? stored-file #f) + (let ((el (send this element 'album-art))) + (when (eq? (system-type 'os) 'windows) + (set! stored-file (string-append "/" stored-file))) + (let ((html (format "" stored-file (current-milliseconds)))) + (send el set-inner-html! html)))) + ;(send el set-attr! 'src stored-file)))) + ) ) + (displayln" Done updating track") ) - (displayln" Done updating track") ) ) @@ -282,11 +288,14 @@ (define/public (play-path path) (displayln (format "Playing ~a" path)) - (set! playlist (new playlist% [start-map path])) - (send playlist read-tracks) - (displayln (format "number of tracks: ~a" (send playlist length))) - (send this update-playlist) - (send player play playlist) + (let ((pl (new playlist% [start-map path]))) + (set! current-track-nr #f) + (send pl read-tracks) + (set! playlist pl) + (send this update-playlist) + (send player play pl) + (displayln (format "number of tracks: ~a" (send playlist length))) + ) ) (define/public (add-path path) diff --git a/player.rkt b/player.rkt index c7ef42d..bb3c818 100644 --- a/player.rkt +++ b/player.rkt @@ -221,7 +221,7 @@ (set! track i) (set! ct-data (send pl track i)) (set-state! 'play) - (displayln "Set state to 'play") + (displayln (format "Set state to 'play, updating to track ~a" track)) (track-nr-updater track) (displayln "track-nr-updater called") ) @@ -287,7 +287,9 @@ (define/public (play playlist) (stop-and-clear) + ;(unless (eq? pl #f) (send pl display-tracks)) (set! pl playlist) + ;(unless (eq? pl #f) (send pl display-tracks)) (send this play-track 0) ) diff --git a/playlist.rkt b/playlist.rkt index d56bca3..6ccce63 100644 --- a/playlist.rkt +++ b/playlist.rkt @@ -68,6 +68,12 @@ ) #f))) + (define/public (image->mimetype) + (let ((tags (read-tags))) + (if (tags-valid? tags) + (tags-picture->mimetype tags) + 'no-mimetype))) + (super-new) (begin diff --git a/rktplayer.rkt b/rktplayer.rkt index d5c0529..0e51871 100644 --- a/rktplayer.rkt +++ b/rktplayer.rkt @@ -19,17 +19,17 @@ ) (ww-set-debug #f) -(ww-set-log-level 'warning) +(ww-set-log-level 'info) ;(ww-tail-log) ;(ww-tail-log) -;(ao-set-async-mode! 'scheme) +(ao-set-async-mode! 'scheme) ;(collect-garbage 'incremental) -(ao-set-async-mode! 'ffi) +;(ao-set-async-mode! 'ffi) (define (run) (let* ((ini (new ini% [file 'rktplayer])) (settings (new ww-simple-ini% [ini ini] [section 'player])) - (window (new rktplayer% [settings settings] [use-browser #f])) + (window (new rktplayer% [settings settings] [use-browser #t])) ) window) )