diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2020-08-27 20:58:31 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2020-08-27 20:58:31 +0200 |
commit | 8d2f64e441c041f317130f372760f4e5a76a171f (patch) | |
tree | dc30b12ae414a367f52a9e5116586948d2a234fb /module/calp/server | |
parent | Add search field. (diff) | |
download | calp-8d2f64e441c041f317130f372760f4e5a76a171f.tar.gz calp-8d2f64e441c041f317130f372760f4e5a76a171f.tar.xz |
Propagate errors to HTML search page.
Diffstat (limited to 'module/calp/server')
-rw-r--r-- | module/calp/server/routes.scm | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/module/calp/server/routes.scm b/module/calp/server/routes.scm index 865c11c7..389941c7 100644 --- a/module/calp/server/routes.scm +++ b/module/calp/server/routes.scm @@ -375,29 +375,36 @@ (define page (string->number (or p "0"))) - ;; TODO Propagate errors + (define error #f) + (define search-result - (catch 'max-page - ;; TODO Get-page only puts a time limiter per page, meaning that - ;; if a user requests page 1000 the server is stuck trying to - ;; find that page, which can take up to 1000 * timeslice = 500s = 8min+ - ;; A timeout here, and also an actual multithreaded server should - ;; solve this. - (lambda () (get-page paginator page)) - (lambda (err page-number) - (define location - (build-relative-ref - path: r:path ; host: r:host port: r:port - query: (format #f "~a&p=~a" q= page-number))) - (return (build-response - code: 307 - headers: `((location . ,location))))))) + (catch #t + (lambda () + (catch 'max-page + ;; TODO Get-page only puts a time limiter per page, meaning that + ;; if a user requests page 1000 the server is stuck trying to + ;; find that page, which can take up to 1000 * timeslice = 500s = 8min+ + ;; A timeout here, and also an actual multithreaded server should + ;; solve this. + (lambda () (get-page paginator page)) + (lambda (err page-number) + (define location + (build-relative-ref + path: r:path ; host: r:host port: r:port + query: (format #f "~a&p=~a" q= page-number))) + (return (build-response + code: 307 + headers: `((location . ,location))))))) + (lambda (err callee fmt arg data) + (set! error + (format #f "~?~%" fmt arg))))) (return '((content-type application/xhtml+xml)) (with-output-to-string (lambda () (sxml->xml (search-result-page + error q search-term search-result page paginator q=)))))) ;; NOTE this only handles files with extensions. Limited, but since this |