mirror of https://codeberg.org/cage/tinmop/
- [GUI] added custom error pages for gemini errors code.
This commit is contained in:
parent
6c45270877
commit
47f98d7442
|
@ -0,0 +1,8 @@
|
||||||
|
# Error!
|
||||||
|
|
||||||
|
### {url}
|
||||||
|
### not found
|
||||||
|
|
||||||
|
### Server replied:
|
||||||
|
|
||||||
|
### {meta}
|
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
|
@ -518,7 +518,7 @@
|
||||||
(encode-flat-array-of-plists (unbox object) stream))
|
(encode-flat-array-of-plists (unbox object) stream))
|
||||||
|
|
||||||
(defun gemini-parse-string (string)
|
(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
|
(make-instance 'parsed-lines-slice
|
||||||
:contents (rearrange-parsed-line-for-encoding parsed-lines))))
|
:contents (rearrange-parsed-line-for-encoding parsed-lines))))
|
||||||
|
|
||||||
|
@ -530,19 +530,40 @@
|
||||||
(defun gemini-slurp-local-file (path)
|
(defun gemini-slurp-local-file (path)
|
||||||
(fs:slurp-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)
|
(defun make-error-page (iri code description meta)
|
||||||
(let* ((separator (make-string 10 :initial-element gemini-parser::+h2-underline+))
|
(let ((error-gemtext (construct-error-page iri code meta)))
|
||||||
(gemtext (with-output-to-string (stream)
|
(if error-gemtext
|
||||||
(write-sequence (gemini-parser:geminize-h2 (format nil
|
(gemini-parse-string error-gemtext)
|
||||||
"~a ~a~%"
|
(let* ((separator (make-string 10 :initial-element gemini-parser::+h2-underline+))
|
||||||
code
|
(gemtext (with-output-to-string (stream)
|
||||||
description))
|
(write-sequence (gemini-parser:geminize-h2 (format nil
|
||||||
stream)
|
"~a ~a~%"
|
||||||
(write-sequence (gemini-parser:geminize-preformatted separator)
|
code
|
||||||
stream)
|
description))
|
||||||
(write-sequence (format nil "Error connecting to: ~a:~2%" iri) stream)
|
stream)
|
||||||
(write-sequence (format nil "~a~%" meta) stream))))
|
(write-sequence (gemini-parser:geminize-preformatted separator)
|
||||||
(gemini-parse-string gemtext)))
|
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)
|
(defun gemini-save-url-db-history (iri)
|
||||||
(db:insert-in-history (ui:open-url-prompt) iri))
|
(db:insert-in-history (ui:open-url-prompt) iri))
|
||||||
|
|
Loading…
Reference in New Issue