]> git.elephly.net Git - software/mumi.git/commitdiff
messages: Add status-with-cache.
authorRicardo Wurmus <rekado@elephly.net>
Fri, 1 Feb 2019 11:43:11 +0000 (12:43 +0100)
committerRicardo Wurmus <rekado@elephly.net>
Fri, 1 Feb 2019 11:43:11 +0000 (12:43 +0100)
* mumi/messages.scm (status-with-cache): New procedure.

mumi/messages.scm

index 5cf3390cfcd09bc773c06549281535221b31d267..22d875333cee77869943f024dda9ae6fd03a534b 100644 (file)
@@ -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)
             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)