1
0
Fork 0

- fixed crash when 'contains-clsr' is called

This function called cl-ppcre:create-scanner  but if the argument to
  this function can not be interpreted  as a valid regex (e.g "["), an
  error is signalled.

  This error is now captured and the string passed to 'create-scanner'
  is used as a mere sequence not a regular expression.

- [gemini] fixed bug that prevented a page to be reloaded;
- [gemini] use cache, if possible, when opening a gemini url.
This commit is contained in:
cage 2021-04-03 11:14:58 +02:00
parent 6690a1b6f7
commit f1c8ec0ec1
3 changed files with 14 additions and 6 deletions

View File

@ -103,9 +103,14 @@ completed) and the common prefix of the completion string."
(text-utils:string-starts-with-p hint a))) (text-utils:string-starts-with-p hint a)))
(defun contains-clsr (hint) (defun contains-clsr (hint)
(let ((scanner (cl-ppcre:create-scanner hint))) (handler-case
(lambda (a) (let ((scanner (cl-ppcre:create-scanner hint)))
(cl-ppcre:scan scanner a)))) (lambda (a)
(cl-ppcre:scan scanner a)))
(error ()
(let ((scanner (cl-ppcre:create-scanner `(:sequence ,hint))))
(lambda (a)
(cl-ppcre:scan scanner a))))))
(defun remove-if-hidden (candidates) (defun remove-if-hidden (candidates)
(remove-if #'db:hidden-recipient-p candidates)) (remove-if #'db:hidden-recipient-p candidates))

View File

@ -536,7 +536,7 @@
(certificate nil) (certificate nil)
(certificate-key nil) (certificate-key nil)
(use-cached-file-if-exists nil) (use-cached-file-if-exists nil)
(do-nothing-if-exists-in-db t)) (do-nothing-if-exists-in-db nil))
(labels ((get-user-input (hide-input url prompt) (labels ((get-user-input (hide-input url prompt)
(multiple-value-bind (actual-iri host path query port fragment) (multiple-value-bind (actual-iri host path query port fragment)
(gemini-client:displace-iri (iri:iri-parse url)) (gemini-client:displace-iri (iri:iri-parse url))
@ -743,7 +743,7 @@
(defun open-gemini-stream-window () (defun open-gemini-stream-window ()
(let* ((low-level-window (make-croatoan-window :enable-function-keys t))) (let* ((low-level-window (make-croatoan-window :enable-function-keys t)))
(setf *gemini-streams-window* (setf *gemini-streams-window*
(make-instance 'gemini-streams-window (make-instance 'gemini-streams-window
:top-row-padding 0 :top-row-padding 0
:title (_ "Current gemini streams") :title (_ "Current gemini streams")
@ -760,7 +760,8 @@
(defun load-gemini-url (url &key (defun load-gemini-url (url &key
(priority program-events:+standard-event-priority+) (priority program-events:+standard-event-priority+)
(give-focus-to-message-window t)) (give-focus-to-message-window t)
(use-cached-file-if-exists nil))
"Load `url', that is a web resource or a local file. This function "Load `url', that is a web resource or a local file. This function
can be used only when the event polling is enabled (e.g. from user can be used only when the event polling is enabled (e.g. from user
command) otherwise te actual code to get the resource will never be command) otherwise te actual code to get the resource will never be
@ -768,5 +769,6 @@ executed."
(let* ((event (make-instance 'program-events:gemini-request-event (let* ((event (make-instance 'program-events:gemini-request-event
:give-focus-to-message-window give-focus-to-message-window :give-focus-to-message-window give-focus-to-message-window
:priority priority :priority priority
:use-cached-file-if-exists use-cached-file-if-exists
:url url))) :url url)))
(program-events:push-event event))) (program-events:push-event event)))

View File

@ -1779,6 +1779,7 @@ open-message-link-window:open-message-link"
"Ask for a gemini address and try to load it" "Ask for a gemini address and try to load it"
(flet ((on-input-complete (url) (flet ((on-input-complete (url)
(gemini-viewer:load-gemini-url url (gemini-viewer:load-gemini-url url
:use-cached-file-if-exists t
:priority program-events:+maximum-event-priority+))) :priority program-events:+maximum-event-priority+)))
(let ((prompt (gemini-open-url-prompt))) (let ((prompt (gemini-open-url-prompt)))