This commit is contained in:
2026-07-29 16:22:04 +02:00
parent 727e0643af
commit 72991f2384
6 changed files with 591 additions and 95 deletions
+118 -9
View File
@@ -24,7 +24,7 @@
(define player-menu
(λ ()
(λ (player-submenu)
(wv-menu 'main-menu
(wv-menu-item 'm-file (tr 'file)
#:submenu (wv-menu 'file-menu
@@ -33,6 +33,9 @@
(wv-menu-item 'm-quit (tr 'quit) #:separator #t)
)
)
(wv-menu-item 'm-player
(tr 'player)
#:submenu player-submenu)
)))
(define rktplayer%
@@ -82,6 +85,116 @@
(define current-at-seconds 0)
(define current-length-seconds 0)
(define dlna-renderers '())
(define selected-dlna-renderer #f)
(define finding-dlna-renderers #f)
(define dlna-menu-items (make-hash))
(define (selected-dlna-renderer? renderer)
(and selected-dlna-renderer
(string=?
(send player dlna-renderer-name renderer)
(send player
dlna-renderer-name
selected-dlna-renderer))))
(define (make-player-submenu)
(hash-clear! dlna-menu-items)
(let ((items
(list
(wv-menu-item
'm-player-local
(if (eq? (send player kind) 'local)
(format "[x] ~a" (tr 'local-player))
(tr 'local-player)))
(wv-menu-item
'm-find-dlna
(if finding-dlna-renderers
(tr 'finding-dlna-renderers)
(tr 'find-dlna-renderers))
#:separator #t))))
(let ((nr 0))
(for-each
(lambda (renderer)
(let ((id (string->symbol (format "m-dlna-~a" nr)))
(name (send player dlna-renderer-name renderer)))
(hash-set! dlna-menu-items id renderer)
(set! items
(append
items
(list
(wv-menu-item
id
(if (selected-dlna-renderer? renderer)
(format "[x] ~a" name)
name)))))
(set! nr (+ nr 1))))
dlna-renderers))
(apply wv-menu 'player-menu items)))
(define (install-menu)
(send this set-menu! (player-menu (make-player-submenu)))
(send this connect-menu! 'm-quit (lambda () (send this quit)))
(send this connect-menu!
'm-select-library-dir
(lambda () (send this select-library)))
(send this connect-menu!
'm-settings
(lambda () (send this settings-dlg)))
(send this connect-menu!
'm-player-local
(lambda ()
(send player change-player 'local)
(set! selected-dlna-renderer #f)
(install-menu)))
(send this connect-menu!
'm-find-dlna
(lambda ()
(send this find-dlna-renderers)))
(hash-for-each
dlna-menu-items
(lambda (id renderer)
(send this connect-menu!
id
(lambda ()
(send this select-dlna-renderer renderer))))))
(define/public (find-dlna-renderers)
(unless finding-dlna-renderers
(set! finding-dlna-renderers #t)
(install-menu)
(thread
(lambda ()
(let ((renderers
(with-handlers
((exn:fail?
(lambda (exception)
(warn-rktplayer
"Could not find DLNA renderers: ~a"
(exn-message exception))
'())))
(send player query-dlna-renderers))))
(queue-callback
(lambda ()
(set! dlna-renderers renderers)
(set! finding-dlna-renderers #f)
(info-rktplayer
"Found ~a DLNA renderer(s)"
(length dlna-renderers))
(install-menu))))))))
(define/public (select-dlna-renderer renderer)
(with-handlers
((exn:fail?
(lambda (exception)
(message-box
(tr 'dlna-error)
(exn-message exception)
#f
'(ok stop)))))
(send player change-player 'dlna #:renderer renderer)
(set! selected-dlna-renderer renderer)
(install-menu)))
(define/public (update-volume)
(let ((el (send this element 'volume-percentage)))
@@ -193,7 +306,9 @@
(unless (eq? st state)
(dbg-rktplayer "Changing to state ~a" st)
(let ((el (send this element 'paused)))
(cond ((or (eq? st 'playing) (eq? st 'play))
(cond ((or (eq? st 'playing)
(eq? st 'play)
(eq? st 'transitioning))
(set-play-button "buttons/pause.svg")
(send el set-innerHTML! (list 'span (tr 'playing))))
((eq? st 'stopped)
@@ -407,11 +522,7 @@
(set! el-channels (send this element 'channels))
(set! el-format (send this element 'format))
(send this set-menu! (player-menu))
(send this connect-menu! 'm-quit (λ () (send this quit)))
(send this connect-menu! 'm-select-library-dir (λ () (send this select-library)))
(send this connect-menu! 'm-settings (λ () (send this settings-dlg)))
(send this connect-menu! 'm-add-tab (λ () (send this add-tab)))
(install-menu)
(dbg-rktplayer "page-loaded, playlist = ~a" playlist)
(send this update-tabs)
@@ -735,5 +846,3 @@
)
)
)