messages: patch-messages: Use download-message.
authorRicardo Wurmus <rekado@elephly.net>
Sun, 21 Jul 2019 11:12:37 +0000 (13:12 +0200)
committerRicardo Wurmus <rekado@elephly.net>
Sun, 21 Jul 2019 11:12:37 +0000 (13:12 +0200)
* mumi/messages.scm (patch-messages): Rewrite to use download-message.

mumi/messages.scm

index 34ab02feaaf1c32708ef58f6a8bb71ab30bd8624..d35b1aaa0e3cd9ce888749afb8861b84a6921e0c 100644 (file)
@@ -173,10 +173,24 @@ target file."
                                                 (get-bytevector-all port))))))
                         file-name)))))))
 
-(define-public (patch-messages id)
-  "Return list of messages relating to the bug ID."
-  ;; TODO: sort by date necessary?
-  (soap-invoke* (%config 'debbugs) get-bug-log id))
+;; We would like to use get-bug-log here, but it often returns
+;; truncated messages.  This is a known bug upstream.
+(define-public (patch-messages bug-id)
+  "Return list of messages relating to the bug BUG-ID.  Cache the
+result for a while."
+  (let ((key (list 'patch-messages bug-id)))
+    (or (cached? key)
+        (cache! key
+                (match
+                    (soap-invoke* (%config 'debbugs) get-bug-message-numbers bug-id)
+                  ((msg-nums . _)
+                   (map (lambda (msg-num)
+                          (with-input-from-file (download-message bug-id msg-num)
+                            (lambda ()
+                              (match (mbox->emails (current-input-port))
+                                ((email) (parse-email email))
+                                (_ #f)))))
+                        msg-nums)))))))
 
 (define* (search-bugs query #:key (attributes '()) (max 100))
   "Return a list of all bugs matching the given QUERY string."