ambrevar/file: Add mediafile support.
parent
54ef9aaaed
commit
b6f307753f
|
@ -9,6 +9,9 @@
|
||||||
(trivial-package-local-nicknames:add-package-local-nickname :alex :alexandria)
|
(trivial-package-local-nicknames:add-package-local-nickname :alex :alexandria)
|
||||||
(trivial-package-local-nicknames:add-package-local-nickname :sera :serapeum))
|
(trivial-package-local-nicknames:add-package-local-nickname :sera :serapeum))
|
||||||
|
|
||||||
|
;; TODO: Allow some slots to modify file on disk. Transaction?
|
||||||
|
;; Could we edit files virtually nonetheless? Does that even make sense?
|
||||||
|
|
||||||
(sera:eval-always
|
(sera:eval-always
|
||||||
(defun name-identity (name definition)
|
(defun name-identity (name definition)
|
||||||
(declare (ignore definition))
|
(declare (ignore definition))
|
||||||
|
@ -230,3 +233,29 @@ See `%description'."
|
||||||
(defun finder+mime (root &rest predicates)
|
(defun finder+mime (root &rest predicates)
|
||||||
(let ((*finder-constructor* #'file+mime))
|
(let ((*finder-constructor* #'file+mime))
|
||||||
(apply #'finder root predicates)))
|
(apply #'finder root predicates)))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
(defclass* mediafile (file+mime) ; REVIEW: Include MIME?
|
||||||
|
((media-format nil
|
||||||
|
:type (or null ambrevar/ffprobe:media-format))
|
||||||
|
(media-streams '()
|
||||||
|
:type (or null
|
||||||
|
(cons ambrevar/ffprobe:media-stream))))
|
||||||
|
(:accessor-name-transformer #'name-identity))
|
||||||
|
|
||||||
|
(defmethod initialize-instance :after ((file mediafile) &key)
|
||||||
|
(let ((probe (ambrevar/ffprobe:ffprobe (path file))))
|
||||||
|
(setf (media-format file) (first probe)
|
||||||
|
(media-streams file) (rest probe))))
|
||||||
|
|
||||||
|
(defun mediafile (path)
|
||||||
|
(make-instance 'mediafile :path path))
|
||||||
|
|
||||||
|
(defun mediawalk (root &rest predicates)
|
||||||
|
(let ((*finder-constructor* #'mediafile))
|
||||||
|
(apply #'walk root predicates)))
|
||||||
|
|
||||||
|
(defun mediafinder (root &rest predicates)
|
||||||
|
(let ((*finder-constructor* #'mediafile))
|
||||||
|
(apply #'finder root predicates)))
|
||||||
|
|
Loading…
Reference in New Issue