diff --git a/gui.rkt b/gui.rkt
index 8f3659e..0e49d71 100644
--- a/gui.rkt
+++ b/gui.rkt
@@ -67,11 +67,15 @@
(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 (exact->inexact (/ (* 100 as) ls))))
+ (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")
)
)
)
@@ -80,24 +84,54 @@
(define current-track-nr #f)
(define (update-track-nr nr)
- (let ((id (λ () (string->symbol (format "track-~a" (+ current-track-nr 1))))))
+ (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 track: ~a" (id)))
+ (displayln (format "current old track: ~a" (id)))
(let ((el (send this element (id))))
(send el remove-class! "current")))
(set! current-track-nr nr)
-
+
+ (displayln "Adding current")
(unless (eq? current-track-nr #f)
- (displayln (format "current track: ~a" (id)))
+ (displayln (format "current new track: ~a" (id)))
(let ((el (send this element (id))))
- (send el add-class! "current")))
+ (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))
+ )
+ (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" Done updating track")
)
)
+
+ (define state #f)
+ (define (update-state st)
+ (unless (eq? st state)
+ (set! state st)
+ (if (eq? st 'playing)
+ (let ((btn (send this element 'play-img)))
+ (send btn set-attr! 'src "buttons/stop.svg"))
+ (let ((btn (send this element 'play-img)))
+ (send btn set-attr! 'src "buttons/play.svg")))))
(define player (new player%
[time-updater update-time]
[track-nr-updater update-track-nr]
+ [state-updater update-state]
[settings settings]
))
@@ -106,7 +140,8 @@
(define/override (html-loaded)
(super html-loaded)
- (ww-connect 'play play)
+ (ww-connect 'play play-or-stop)
+ (ww-connect 'pause pause)
(ww-connect 'prev previous-track)
(ww-connect 'next next-track)
(ww-connect 'repeat repeat)
@@ -133,11 +168,37 @@
(define/public (update-playlist)
(let ((html (send playlist to-html)))
- (send el-playlist set-inner-html! html)
+ (hash-set! inner-html-handlers (send el-playlist set-inner-html! html)
+ (λ (oke)
+ (when oke
+ (send this bind 'click "table.tracks tr")
+ (send playlist for-each
+ (λ (idx track)
+ (let* ((track-id (send playlist track-id idx))
+ (el (send this new-element track-id)))
+ (send el connect 'click
+ (λ (args)
+ (send this play-track idx))))
+ )
+ )
+ )
+ )
+ )
+ (displayln "Done.")
(update-track-nr current-track-nr)
)
)
+ (define/public (scroll-top id)
+ (send this exec-js
+ (format
+ (string-append "let el_id = '~a';"
+ "console.log('id = ' + el_id);"
+ "let el = document.getElementById(el_id);"
+ "console.log(el);"
+ "el.scrollTop = 0;")
+ id)))
+
(define/public (update-library)
(when (eq? current-music-path #f)
(set! current-music-path music-library))
@@ -157,17 +218,15 @@
(hash-set! inner-html-handlers handle
(λ (oke)
(when oke
- (send this bind 'dblclick "td.library-entry")
+ (send this scroll-top 'library)
(send this bind 'click "td.library-entry")
(send this bind 'contextmenu "td.library-entry")
(for-each (λ (row)
(let ((path-id (string->symbol (caddr row))))
(let ((el (send this new-element path-id)))
- (send el connect 'dblclick
+ (send el connect 'click
(λ (args)
(send this path-choosen (cadr row))))
- (send el connect 'click
- (λ (args) #t))
(send el connect 'contextmenu
(λ (evt)
(send this context-for-path evt (cadr row))))
@@ -244,10 +303,20 @@
(open-file-manager folder)))
;(shell-execute #f folder #f #f 'sw_show)))
- (define/public (play)
- (displayln "Play button clicked")
+ (define/public (play-or-stop)
+ (if (eq? state 'playing)
+ (begin
+ (send player stop)
+ (update-time 0.0 0.0))
+ (send player play-track current-track-nr))
)
+ (define/public (play-track idx)
+ (send player play-track idx))
+
+ (define/public (pause)
+ (send player pause-unpause))
+
(define/public (next-track)
(send player next)
)
diff --git a/gui/buttons/pause.svg b/gui/buttons/pause.svg
new file mode 100644
index 0000000..3ebf5cc
--- /dev/null
+++ b/gui/buttons/pause.svg
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/gui/buttons/stop.svg b/gui/buttons/stop.svg
new file mode 100644
index 0000000..7ee7e6a
--- /dev/null
+++ b/gui/buttons/stop.svg
@@ -0,0 +1,17 @@
+
+
+
\ No newline at end of file
diff --git a/gui/rktplayer.html b/gui/rktplayer.html
index b65c65d..ab6b9f1 100644
--- a/gui/rktplayer.html
+++ b/gui/rktplayer.html
@@ -11,6 +11,7 @@