view: Handle bytevector mime parts.
authorRicardo Wurmus <rekado@elephly.net>
Mon, 28 Jan 2019 22:54:17 +0000 (23:54 +0100)
committerRicardo Wurmus <rekado@elephly.net>
Mon, 28 Jan 2019 22:55:34 +0000 (23:55 +0100)
* mumi/web/view/utils.scm (display-message-body): Handle mime entities
with a bytevector part.

mumi/web/view/utils.scm

index bb45a33e8ca460f182ed15232426ba7dc3dbbe7f..584b9a9ae64fdd114c6bfb04e8ff27e5664e6769 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mumi -- Mediocre, uh, mail interface
-;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This program is free software: you can redistribute it and/or
   #:use-module (ice-9 match)
   #:use-module (ice-9 regex)
   #:use-module (ice-9 receive)
+  #:use-module (ice-9 iconv)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (syntax-highlight)
   #:use-module (syntax-highlight scheme)
   #:use-module (email email)
   #:use-module (mumi messages)
+  #:use-module (rnrs bytevectors)
   #:export (prettify
             avatar-color
             display-message-body))
@@ -152,12 +154,19 @@ BUG-NUM), even when it is a multipart message."
       (($ <mime-entity> headers (? string? body))
        (apply display-multipart-chunk `(,headers ,body ,path)))
       ;; Message parts can be nested.
-      (($ <mime-entity> headers sub-parts)
+      (($ <mime-entity> headers (? list? sub-parts))
        (map (lambda (part sub-part-num)
               (apply display-mime-entity part
                      (append path (list sub-part-num))))
             sub-parts
-            (iota (length sub-parts))))))
+            (iota (length sub-parts))))
+      ;; XXX: Sometimes we get an unparseable bytevector.  Convert it
+      ;; when that happens.
+      (($ <mime-entity> headers (? bytevector? raw))
+       (apply display-multipart-chunk
+              `(,headers
+                ,(bytevector->string raw "ISO-8859-1")
+                ,path)))))
   (cond
    ((multipart-message? message)
     (let ((parts (email-body message)))