about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--users/sterni/mblog/default.nix1
-rw-r--r--users/sterni/mblog/note.lisp18
-rw-r--r--users/sterni/mblog/packages.lisp2
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