diff options
author | sterni <sternenseemann@systemli.org> | 2021-08-22T12·32+0200 |
---|---|---|
committer | sterni <sternenseemann@systemli.org> | 2021-09-12T21·39+0000 |
commit | 7f31562acfc9a83e042a506bf7bdaca5de4e789a (patch) | |
tree | 1918ec4cf9c396f16f26b3ef06f502c3bb4f02d5 /third_party/lisp | |
parent | 62fa36c9c2ef79b9b2aefaec8eac71665de45847 (diff) |
feat(3p/lisp/mime4cl): search for first (default) mime text part r/2853
Adds a simple generic function find-mime-text-part which returns the first suitable text/* part in any MIME part it is given. Has no meaningful alternatives handling at the moment: It will pick the first text part and doesn't allow specifying a preference. Change-Id: Id9b113b3ef3ca1a575ce8f3582a4f85e30edfb43 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3379 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
Diffstat (limited to 'third_party/lisp')
-rw-r--r-- | third_party/lisp/mime4cl/mime.lisp | 24 | ||||
-rw-r--r-- | third_party/lisp/mime4cl/package.lisp | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/third_party/lisp/mime4cl/mime.lisp b/third_party/lisp/mime4cl/mime.lisp index 25c972f086b3..e35ae6bea547 100644 --- a/third_party/lisp/mime4cl/mime.lisp +++ b/third_party/lisp/mime4cl/mime.lisp @@ -1,6 +1,7 @@ ;;; mime4cl.lisp --- MIME primitives for Common Lisp ;;; Copyright (C) 2005-2008, 2010 by Walter C. Pelissero +;;; Copyright (C) 2021 by the TVL Authors ;;; Author: Walter C. Pelissero <walter@pelissero.de> ;;; Project: mime4cl @@ -964,6 +965,29 @@ is a string.")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defmethod find-mime-text-part (msg) + (:documentation + "Return message if it is a text message or first text part. + If no suitable text part is found, return NIL.")) + +(defmethod find-mime-text-part ((part mime-text)) + part) ; found our target + +(defmethod find-mime-text-part ((msg mime-message)) + ;; mime-body is either a mime-part or mime-multipart + (find-mime-text-part (mime-body msg))) + +(defmethod find-mime-text-part ((parts mime-multipart)) + ;; multipart messages may have a body, otherwise we + ;; search for the first text part + (or (call-next-method) + (find-if #'find-mime-text-part (mime-parts parts)))) + +(defmethod find-mime-text-part ((part mime-part)) + nil) ; default case + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (defgeneric mime-type-string (mime-part) (:documentation "Return the string describing the MIME part.")) diff --git a/third_party/lisp/mime4cl/package.lisp b/third_party/lisp/mime4cl/package.lisp index c1b94f21d7f2..a6e7e7d8ef10 100644 --- a/third_party/lisp/mime4cl/package.lisp +++ b/third_party/lisp/mime4cl/package.lisp @@ -65,6 +65,7 @@ #:mime= #:find-mime-part-by-path #:find-mime-part-by-id + #:find-mime-text-part #:encode-mime-part #:encode-mime-body #:decode-quoted-printable-stream |