1
0
Fork 0

- [GUI] added custom error pages for gemini errors code.

This commit is contained in:
cage 2023-07-16 14:38:16 +02:00
parent 6c45270877
commit 47f98d7442
3 changed files with 42 additions and 13 deletions

8
data/error-pages/51 Normal file
View File

@ -0,0 +1,8 @@
# Error!
### {url}
### not found
### Server replied:
### {meta}

BIN
data/icons/fmw_text.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -518,7 +518,7 @@
(encode-flat-array-of-plists (unbox object) stream))
(defun gemini-parse-string (string)
(let ((parsed-lines (gemini-parser:parse-gemini-file string)))
(let ((parsed-lines (gemini-parser:parse-gemini-file string :initialize-parser t)))
(make-instance 'parsed-lines-slice
:contents (rearrange-parsed-line-for-encoding parsed-lines))))
@ -530,19 +530,40 @@
(defun gemini-slurp-local-file (path)
(fs:slurp-file path))
(a:define-constant +error-pages-path+ "/data/error-pages" :test #'string=)
(a:define-constant +error-template-url-placeholder+ "{url}" :test #'string=)
(a:define-constant +error-template-meta-placeholder+ "{meta}" :test #'string=)
(defun construct-error-page (iri code meta)
(ignore-errors
(a:when-let* ((file-path (res:get-data-file (fs:cat-parent-dir +error-pages-path+
(to-s code))))
(template (fs:slurp-file file-path)))
(setf template (cl-ppcre:regex-replace-all +error-template-url-placeholder+
template
iri))
(setf template (cl-ppcre:regex-replace-all +error-template-meta-placeholder+
template
meta)))))
(defun make-error-page (iri code description meta)
(let* ((separator (make-string 10 :initial-element gemini-parser::+h2-underline+))
(gemtext (with-output-to-string (stream)
(write-sequence (gemini-parser:geminize-h2 (format nil
"~a ~a~%"
code
description))
stream)
(write-sequence (gemini-parser:geminize-preformatted separator)
stream)
(write-sequence (format nil "Error connecting to: ~a:~2%" iri) stream)
(write-sequence (format nil "~a~%" meta) stream))))
(gemini-parse-string gemtext)))
(let ((error-gemtext (construct-error-page iri code meta)))
(if error-gemtext
(gemini-parse-string error-gemtext)
(let* ((separator (make-string 10 :initial-element gemini-parser::+h2-underline+))
(gemtext (with-output-to-string (stream)
(write-sequence (gemini-parser:geminize-h2 (format nil
"~a ~a~%"
code
description))
stream)
(write-sequence (gemini-parser:geminize-preformatted separator)
stream)
(write-sequence (format nil "Error connecting to: ~a:~2%" iri) stream)
(write-sequence (format nil "~a~%" meta) stream))))
(gemini-parse-string gemtext)))))
(defun gemini-save-url-db-history (iri)
(db:insert-in-history (ui:open-url-prompt) iri))