emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/scanner 5f06a4a 21/56: implement correct cleanup and er


From: Stefan Monnier
Subject: [elpa] externals/scanner 5f06a4a 21/56: implement correct cleanup and error handling (scanner-scan-document)
Date: Fri, 10 Apr 2020 13:56:01 -0400 (EDT)

branch: externals/scanner
commit 5f06a4a0fdf3bf186c511eb8fa47fe76ffd6e4db
Author: Raffael Stocker <address@hidden>
Commit: Raffael Stocker <address@hidden>

    implement correct cleanup and error handling (scanner-scan-document)
---
 scanner.el | 42 +++++++++++++++++++++++++-----------------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/scanner.el b/scanner.el
index b785df0..afc2e93 100644
--- a/scanner.el
+++ b/scanner.el
@@ -411,13 +411,17 @@ available, ask for a selection interactively."
        (file-list '())
        (fl-file nil))
     (cl-labels ((cleanup
+                ()
+                (and file-list (dolist (file file-list)
+                                 (delete-file file)))
+                (and fl-file (delete-file fl-file)))
+               (finish
                 (process event)
-                (let ((ev (string-trim event)))
-                  (unless (string= "finished" ev)
-                    (message "%s: %s" process ev))
-                  (dolist (file file-list)
-                    (delete-file file))
-                  (delete-file fl-file)))
+                (unwind-protect
+                    (let ((ev (string-trim event)))
+                      (unless (string= "finished" ev)
+                        (error "%s: %s" process ev)))
+                  (cleanup)))
                (tesseract
                 ()
                 (setq file-list (nreverse file-list))
@@ -429,19 +433,23 @@ available, ask for a selection interactively."
                   (make-process :name "Scanner (tesseract)"
                                 :command `(,scanner-tesseract-program
                                            ,@tesseract-args)
-                                :sentinel #'cleanup)))
+                                :sentinel #'finish)))
                (scan-or-finish
                 (process event)
-                (let ((ev (string-trim event)))
-                  (unless (string= "finished" ev)
-                    (error "%s: %s" process ev))
-                  (cond ((consp npages) (if (y-or-n-p "Scan another page? ")
-                                            (scanimage)
-                                          (tesseract)))
-                        ((> num-pages 1)
-                         (cl-decf num-pages)
-                         (run-at-time scanner-scan-delay nil #'scanimage))
-                        (t (tesseract)))))
+                (condition-case err
+                    (let ((ev (string-trim event)))
+                      (unless (string= "finished" ev)
+                        (error "%s: %s" process ev))
+                      (cond ((consp npages) (if (y-or-n-p "Scan another page? 
")
+                                                (scanimage)
+                                              (tesseract)))
+                            ((> num-pages 1)
+                             (cl-decf num-pages)
+                             (run-at-time scanner-scan-delay nil #'scanimage))
+                            (t (tesseract))))
+                  (error
+                   (cleanup)
+                   (signal (car err) (cdr err)))))
                (scanimage
                 ()
                 (let* ((img-file (make-temp-file "scanner" nil (concat "." 
fmt)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]