about summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2017-02-20 00:24:12 +0530
committerArun Isaac2017-02-20 00:24:12 +0530
commit5169f200cce03fb47b4f11b743d46d0204d9e4b6 (patch)
tree902cfd3c2645c24c03305dc735252e4bc5eed4bd
downloadexiftool.el-5169f200cce03fb47b4f11b743d46d0204d9e4b6.tar.gz
exiftool.el-5169f200cce03fb47b4f11b743d46d0204d9e4b6.tar.lz
exiftool.el-5169f200cce03fb47b4f11b743d46d0204d9e4b6.zip
Initial commit
-rw-r--r--el-exiftool-tests.el14
-rw-r--r--el-exiftool.el46
-rw-r--r--test1.pngbin0 -> 1234 bytes
-rw-r--r--test2.jpgbin0 -> 4704 bytes
4 files changed, 60 insertions, 0 deletions
diff --git a/el-exiftool-tests.el b/el-exiftool-tests.el
new file mode 100644
index 0000000..7fce6e8
--- /dev/null
+++ b/el-exiftool-tests.el
@@ -0,0 +1,14 @@
+(require 'el-exiftool)
+(require 'ert)
+
+(ert-deftest read-write-test ()
+  (let ((test-filename "test1.png"))
+    (let ((temp-filename (make-temp-file "el-exiftool-"
+					 nil (concat "-" test-filename)))
+	  (tag "xmp:Marked")
+	  (value "True"))
+      (copy-file test-filename temp-filename t)
+      (el-exiftool-write temp-filename (cons tag value))
+      (should (equal (el-exiftool-read temp-filename tag)
+		     value))
+      (delete-file temp-filename))))
diff --git a/el-exiftool.el b/el-exiftool.el
new file mode 100644
index 0000000..9dd4807
--- /dev/null
+++ b/el-exiftool.el
@@ -0,0 +1,46 @@
+;; -*- lexical-binding: t -*-
+
+(require 'subr-x)
+(require 'cl)
+
+(defun el-exiftool--tq-sync-query (tq question regexp &optional closure)
+  (let ((response))
+    (tq-enqueue tq question regexp closure
+		(lambda (closure answer) (setq response answer)))
+    (while (not response)
+      (accept-process-output))
+    response))
+
+(defun el-exiftool-run ()
+  (when-let (exiftool (get-process "exiftool"))
+    (delete-process exiftool))
+  (start-process "exiftool" "exiftool" "exiftool" "-stay_open" "True" "-@" "-"))
+
+(let ((tq (tq-create (el-exiftool-run))))
+  (defun el-exiftool-command (&rest args)
+    (string-trim
+     (let ((suffix "{ready}\n"))
+       (string-remove-suffix
+	suffix (el-exiftool--tq-sync-query
+		tq (concat (string-join args "\n")
+			   "\n-execute\n")
+		suffix))))))
+
+(defun el-exiftool-read (filepath tag)
+  (el-exiftool-command
+   "-s" "-s" "-s" (format "-%s" tag) filepath))
+
+(defun el-exiftool-copy (source destination)
+  (el-exiftool-command "-overwrite_original"
+		    "-tagsFromFile" source
+		    "-all:all" destination)
+  (message "Tags from %s copied to %s" source destination)
+  destination)
+
+(cl-defun el-exiftool-write (filepath (tag . value))
+  (unless (string-blank-p value)
+    (el-exiftool-command
+     "-m" "-overwrite_original"
+     (format "-%s=%s" tag value) filepath)))
+
+(provide 'el-exiftool)
diff --git a/test1.png b/test1.png
new file mode 100644
index 0000000..7252cca
--- /dev/null
+++ b/test1.png
Binary files differdiff --git a/test2.jpg b/test2.jpg
new file mode 100644
index 0000000..b027165
--- /dev/null
+++ b/test2.jpg
Binary files differ