Complete refactoring for rktplayer, in order to make it play on DLNA renderers and also use UpNP media server resources.
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
#lang racket/base
|
||||
|
||||
(require racket-mimetypes/mimetypes
|
||||
racket/class
|
||||
racket/file
|
||||
racket/path
|
||||
"library-ref.rkt"
|
||||
"base/media-resource.rkt"
|
||||
"track-filesystem-providers.rkt"
|
||||
"track-tag-data.rkt"
|
||||
"base/track.rkt"
|
||||
"../misc/utils.rkt")
|
||||
|
||||
(provide track-filesystem%)
|
||||
|
||||
(define track-filesystem%
|
||||
(class track%
|
||||
(init-field library relative-path)
|
||||
|
||||
(check/c track-filesystem%
|
||||
relative-path
|
||||
list?)
|
||||
|
||||
(define file
|
||||
(send library resolve-path relative-path))
|
||||
|
||||
(define mime-type
|
||||
(mimetype-for-ext
|
||||
file
|
||||
#:default "application/octet-stream"))
|
||||
|
||||
(define tag-source
|
||||
(new tag-source-filesystem%
|
||||
[file file]))
|
||||
|
||||
(super-new
|
||||
[resource
|
||||
(new media-resource-file%
|
||||
[file file]
|
||||
[mime-type mime-type])]
|
||||
[music-library-factory-id
|
||||
(let ((cfg (send library get-cfg)))
|
||||
(library-ref
|
||||
(send cfg get-id)
|
||||
(send cfg get-kind)
|
||||
(send cfg get-kind-version)))]
|
||||
[track-factory-id 'file]
|
||||
[track-relive-info relative-path]
|
||||
[tag-data-provider
|
||||
(new tag-data-provider-filesystem%
|
||||
[tag-source tag-source]
|
||||
[fallback-data
|
||||
(track-tag-data
|
||||
(path->string
|
||||
(file-name-from-path file))
|
||||
""
|
||||
""
|
||||
0
|
||||
0)])]
|
||||
[image-provider
|
||||
(new image-provider-filesystem%
|
||||
[file file]
|
||||
[tag-source tag-source])]
|
||||
[booklet-provider
|
||||
(new booklet-provider-filesystem%
|
||||
[file file])])))
|
||||
|
||||
(module+ test
|
||||
(require rackunit)
|
||||
|
||||
(define file
|
||||
(make-temporary-file "rktplayer-track-~a.mp3"))
|
||||
|
||||
(define cfg%
|
||||
(class object%
|
||||
(define/public (get-id) 'test-library)
|
||||
(define/public (get-kind) 'filesystem)
|
||||
(define/public (get-kind-version) 1)
|
||||
(super-new)))
|
||||
|
||||
(define library%
|
||||
(class object%
|
||||
(define/public (resolve-path relative-path)
|
||||
file)
|
||||
(define/public (get-cfg)
|
||||
(new cfg%))
|
||||
(super-new)))
|
||||
|
||||
(dynamic-wind
|
||||
void
|
||||
(lambda ()
|
||||
(let* ((track
|
||||
(new track-filesystem%
|
||||
[library (new library%)]
|
||||
[relative-path
|
||||
(list (file-name-from-path file))]))
|
||||
(resource (send track get-resource))
|
||||
(library-reference
|
||||
(send track get-music-library-factory-id)))
|
||||
(check-true (is-a? track track%))
|
||||
(check-equal?
|
||||
(send resource get-file)
|
||||
(normal-case-path
|
||||
(path->complete-path file)))
|
||||
(check-equal? (send track get-track-factory-id) 'file)
|
||||
(check-equal? (send track get-track-relive-info)
|
||||
(list (file-name-from-path file)))
|
||||
(check-true (is-a? resource media-resource-file%))
|
||||
(check-true (send resource is-seekable?))
|
||||
(check-equal? (send resource get-mime-type)
|
||||
"audio/mpeg")
|
||||
(check-equal? (library-ref-library-id library-reference)
|
||||
'test-library)))
|
||||
(lambda ()
|
||||
(when (file-exists? file)
|
||||
(delete-file file)))))
|
||||
Reference in New Issue
Block a user