diff options
-rw-r--r-- | users/sterni/mblog/default.nix | 1 | ||||
-rw-r--r-- | users/sterni/mblog/note.lisp | 18 | ||||
-rw-r--r-- | users/sterni/mblog/packages.lisp | 2 |
3 files changed, 20 insertions, 1 deletions
diff --git a/users/sterni/mblog/default.nix b/users/sterni/mblog/default.nix index f8ba70b90bd1..cc605d7cd2ae 100644 --- a/users/sterni/mblog/default.nix +++ b/users/sterni/mblog/default.nix @@ -17,6 +17,7 @@ depot.nix.buildLisp.program { default = depot.nix.buildLisp.bundled "asdf"; } depot.third_party.lisp.alexandria + depot.third_party.lisp.babel depot.third_party.lisp.closure-html depot.third_party.lisp.cl-date-time-parser depot.third_party.lisp.cl-who diff --git a/users/sterni/mblog/note.lisp b/users/sterni/mblog/note.lisp index 0091e97b083f..93d9231aa293 100644 --- a/users/sterni/mblog/note.lisp +++ b/users/sterni/mblog/note.lisp @@ -66,6 +66,20 @@ :test #'string-equal)) (string-equal (cdr uniform-id) "com.apple.mail-note"))) +(defun decode-RFC2047-to-string (input) + (apply + #'concatenate + (cons 'string + (mapcar + (lambda (el) + (etypecase el + (cons (babel:octets-to-string + (car el) + :encoding (babel-encodings:get-character-encoding + (intern (string-upcase (cdr el)) 'keyword)))) + (string el))) + (mime:parse-RFC2047-text input))))) + (defun make-apple-note (msg) (check-type msg mime-message) @@ -73,7 +87,9 @@ (error "Passed message is not an Apple Note according to headers")) (let ((text-part (mime:find-mime-text-part msg)) - (subject (find-mime-message-header "Subject" msg)) + (subject (when-let ((val (find-mime-message-header "Subject" msg))) + ;; TODO(sterni): mime4cl should do this + (decode-RFC2047-to-string val))) (uuid (when-let ((val (find-mime-message-header "X-Universally-Unique-Identifier" msg))) diff --git a/users/sterni/mblog/packages.lisp b/users/sterni/mblog/packages.lisp index 1d5aa07313ca..7e357f89ffac 100644 --- a/users/sterni/mblog/packages.lisp +++ b/users/sterni/mblog/packages.lisp @@ -8,6 +8,8 @@ (defpackage :note (:use :common-lisp + :babel + :babel-encodings :closure-html :who :cl-date-time-parser |