This commit is contained in:
2026-02-25 18:11:13 +01:00
parent 1a05a53b6f
commit 7cefed4d68
8 changed files with 249 additions and 74 deletions

97
gui.rkt
View File

@@ -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)
)