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 :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
|
||||
(defun name-identity (name definition)
|
||||
(declare (ignore definition))
|
||||
|
@ -230,3 +233,29 @@ See `%description'."
|
|||
(defun finder+mime (root &rest predicates)
|
||||
(let ((*finder-constructor* #'file+mime))
|
||||
(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