(use-modules (srfi srfi-19)) ; string/date (use-modules (ice-9 ftw)) (use-modules (ice-9 format)) (use-modules (ice-9 popen)) (use-modules (ice-9 rdelim)) (use-modules (ice-9 textual-ports)) ; put-string (getcwd) (chdir "/home/nixo/memories/inbox/photos/moto/Camera") (define (get-creation filename) (if (access? filename R_OK) (let* ((port (open-input-pipe ;; FIXME: add "datetimeoriginal" as another option (string-join `("exiftool" "-T" "-createdate" ,filename) " "))) (str (read-line port))) (close-pipe port) (string->date str "~Y:~m:~d ~H:~M:~S") ))) (system "ls") ;; (define (date->org date show-time active) (let* ((brackets (if active '("<" ">") '( "[" "]"))) (format (string-append (car brackets) "~Y-~m-~d ~a")) (format (if show-time (string-append format " ~H:~M") format))) (date->string date (string-append format (car (cdr brackets)))))) (define (link->org lnk description replacespaces) (let* ((lnk (if replacespaces (regexp-substitute/global #f "[ \t]+" lnk 'pre "%20" 'post) lnk)) (output (if description (string-concatenate `("[[" ,lnk "][" ,description "]]")) (string-concatenate `("[[" ,lnk "]]"))))) output)) (define (make-org-pair p) (string-concatenate `(,(car p) ":" ,(cadr p)))) (define (format-properties props) (string-join (map (lambda (x) (make-org-pair x)) props) "\n")) (define (create-uuid props) "UUID") (define (org-properties props) (let ((id (create-uuid props))) (string-concatenate `( ":PROPERTIES:\n" ,(format-properties props) ":ID:" ,id "\n" ":END:\n")))) (define (image->org filename) (string-concatenate `("* " ,(date->org (get-creation filename) #t #t) " " ,(link->org (canonicalize-path filename) filename #t) "\n" ,(org-properties `(("FILENAME" ,filename)))))) (use-modules (ice-9 match)) (define remove-stat (match-lambda ((name stat) ; flat file name) ((name stat children ...) ; directory (list name (map remove-stat children))))) (define image-exts '("jpg" "jpeg" "png")) ;; (make-regexp "\.png" regexp/icase) ;; (map image-exts) ;; (map (lambda (ext) (string-match filename) ;; (string-contains-ci "test.png" ext)) image-exts) ;; (define (image? filename) ;; (map (lambda (ext) (string-contains-ci filename ext)) image-exts) ;; ) ;; (filter! image? (cadr (remove-stat (file-system-tree ".")))) ;; (let ((dir ".")) ;; (remove-stat )) (let ((output (open-file "example.org" "a"))) (put-string output (image->org "IMG_20180520_230823.jpg")) (close-port output)) ;; (image-dir->org ".") ;; timestamp = OrgFormat.datetime(datetime) ;; output = OrgFormat.link(filename, photo_file) ;; properties = OrgProperties(photo_file + timestamp)