Skip to content

Commit

Permalink
guile: Fix the mu:body message method
Browse files Browse the repository at this point in the history
Somewhere along the way, the body-txt and body-html fields were merged
into a single body field. Later, commit 8eac392 ("guile: re-enable
the guile support") finally removed support for Field::Id::BodyHtml from
mu:c:get-field.

Unfortunately mu.scm and the documentation are still stuck in the past, so
update them. mu:body-txt is now a synonym for mu:body, and mu:body-html
always returns #f.

I wanted to add a mu:body test also for the rfc822.1 message, but there's
currently a bug where its body text is is duplicated (issue #2802), so the
test would fail.
  • Loading branch information
bauermann committed Jan 4, 2025
1 parent a703f00 commit 606f4be
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 7 deletions.
2 changes: 1 addition & 1 deletion guile/examples/org2mu4e
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ exec guile -e main -s $0 $@
(org-mu4e-link msg)
(if tag (string-concatenate `(":" ,tag "::")) "")
(or (mu:from msg) "?")
(let ((body (mu:body-txt msg)))
(let ((body (mu:body msg)))
(if (not body) ;; get a 'summary' of the body text
"<no plain-text body>"
(string-map
Expand Down
3 changes: 1 addition & 2 deletions guile/mu-guile.texi
Original file line number Diff line number Diff line change
Expand Up @@ -391,8 +391,7 @@ properties, please refer to the @t{mu-find} man-page.

@itemize
@item @code{(mu:bcc msg)}: the @t{Bcc} field of the message, or @t{#f} if there is none
@item @code{(mu:body-html msg)}: : the html body of the message, or @t{#f} if there is none
@item @code{(mu:body-txt msg)}: the plain-text body of the message, or @t{#f} if there is none
@item @code{(mu:body msg)}: the body of the message, or @t{#f} if there is none
@item @code{(mu:cc msg)}: the @t{Bcc} field of the message, or @t{#f} if there is none
@item @code{(mu:date msg)}: the @t{Date} field of the message, or 0 if there is none
@item @code{(mu:flags msg)}: list of message-flags for this message
Expand Down
19 changes: 15 additions & 4 deletions guile/mu.scm
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,7 @@
mu:header
;; message accessors
mu:field:bcc
mu:field:body-html
mu:field:body-txt
mu:field:body
mu:field:cc
mu:field:date
mu:field:flags
Expand All @@ -54,6 +53,9 @@
mu:field:tags
mu:field:timestamp
mu:field:to
;; deprecated message accessors
mu:body-html
mu:body-txt
;; contact funcs
mu:name
mu:email
Expand Down Expand Up @@ -125,8 +127,7 @@
(export method-name)))))

(define-getter mu:bcc mu:field:bcc)
(define-getter mu:body-html mu:field:body-html)
(define-getter mu:body-txt mu:field:body-txt)
(define-getter mu:body mu:field:body)
(define-getter mu:cc mu:field:cc)
(define-getter mu:date mu:field:date)
(define-getter mu:flags mu:field:flags)
Expand All @@ -142,6 +143,16 @@
(define-getter mu:timestamp mu:field:timestamp)
(define-getter mu:to mu:field:to)

(define-method (mu:body-html (msg <mu:message>))
"The HTML body isn't stored separately anymore, so this method can't return
anything useful. We keep it for backwards compatibility."
#f)

(define-method (mu:body-txt (msg <mu:message>))
"The text body isn't stored separately anymore. This method is now a synonym
for mu:body."
(mu:body msg))

(define-method (mu:header (msg <mu:message>) (hdr <string>))
"Get an arbitrary header HDR from message MSG; return #f if it does
not exist."
Expand Down
16 changes: 16 additions & 0 deletions guile/tests/test-mu-guile.scm
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,22 @@ exec guile -e main -s $0 $@
(str-equal-or-exit (mu:to msg) "Democritus <[email protected]>")
(str-equal-or-exit (mu:from msg) "Richard P. Feynman <[email protected]>")
;;(str-equal-or-exit (mu:header msg "Content-Transfer-Encoding") "8bit")
(str-equal-or-exit (mu:body msg)
(string-join
'("If, in some cataclysm, all scientific knowledge were to be destroyed,"
"and only one sentence passed on to the next generation of creatures,"
"what statement would contain the most information in the fewest words?"
"I believe it is the atomic hypothesis (or atomic fact, or whatever you"
"wish to call it) that all things are made of atoms — little particles"
"that move around in perpetual motion, attracting each other when they"
"are a little distance apart, but repelling upon being squeezed into"
"one another. In that one sentence you will see an enormous amount of"
"information about the world, if just a little imagination and thinking"
"are applied.\n") "\n"))
(str-equal-or-exit (mu:body-txt msg) (mu:body msg))
(let ((got (mu:body-html msg)))
(if got
(error-exit "Expected #f, got ~a" got)))

(if (not (equal? (mu:priority msg) mu:prio:high))
(error-exit "Expected ~a, got ~a" (mu:priority msg) mu:prio:high))))
Expand Down

0 comments on commit 606f4be

Please sign in to comment.