-
This commit is contained in:
97
gui.rkt
97
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 "<img src=\"~a\" />" 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)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user