dlna
This commit is contained in:
@@ -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 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user