diff options
-rw-r--r-- | mumi/messages.scm | 16 |
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) |