Previous: Parts and their methods, Up: Attachments and other parts   [Contents]


5.2 Attachment example

Let’s look at some small example. Let’s get a list of the biggest attachments in messages about Luxemburg:

#!/bin/sh
exec guile -s $0 $ !#

(use-modules (mu))
(mu:initialize)

(define (all-attachments expr)
  "Return a list of (name . size) for all attachments in messages
matching EXPR."
  (let ((pairs '()))
    (mu:for-each-message
      (lambda (msg)
	(for-each
	  (lambda (att) ;; add (filename . size) to the list
	    (set! pairs (cons (cons (mu:name att) (or (mu:size att) 0)) pairs)))
	  (mu:attachments msg)))
      expr)
    pairs))

(for-each
  (lambda (att)
    (format #t "~a: ~,1fKb\n"
      (car att) (exact->inexact (/ (cdr att) 1024))))
  (sort (all-attachments "Luxemburg")
    (lambda (att1 att2)
      (< (cdr att1) (cdr att2)))))

As an exercise for the reader, you might want to re-rewrite the all-attachments in terms of mu:message-list, which would probably be a bit more elegant.