summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mumi/messages.scm16
1 files changed, 15 insertions, 1 deletions
diff --git a/mumi/messages.scm b/mumi/messages.scm
index 5cf3390..22d8753 100644
--- a/mumi/messages.scm
+++ b/mumi/messages.scm
@@ -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
@@ -24,6 +24,7 @@
#:use-module (ice-9 regex)
#:use-module (ice-9 match)
#:use-module (ice-9 textual-ports)
+ #:use-module (debbugs cache)
#:use-module (debbugs soap)
#:use-module (debbugs operations)
#:use-module (debbugs bug)
@@ -37,6 +38,19 @@
multipart-message?
extract-attachment))
+(define (status-with-cache ids)
+ "Invoke GET-STATUS, but only on those IDS that have not been cached
+yet. Return new results alongside cached results."
+ (let* ((cached (filter-map cached? ids))
+ (uncached-ids (lset-difference eq?
+ ids
+ (map bug-num cached)))
+ (new (soap-invoke* (%config 'debbugs) get-status uncached-ids)))
+ ;; Cache new things
+ (map (lambda (bug) (cache! (bug-num bug) bug)) new)
+ ;; Return everything from cache
+ (sort (append cached new) (lambda (a b) (< (bug-num a) (bug-num b))))))
+
(define-public (extract-name address)
(or (assoc-ref address 'name)
(and=> (assoc-ref address 'address)