From ce61ab65378262fc7c220ff322b33bf07a980e35 Mon Sep 17 00:00:00 2001 From: cage Date: Thu, 1 Oct 2020 16:39:09 +0200 Subject: [PATCH] - [gemini] fixed the stopping of rendering the old page when a new link is opened; - [gemini] added 'gemini-abort-all-downloading-event', used when quitting. --- src/open-message-link-window.lisp | 1 + src/package.lisp | 2 +- src/program-events.lisp | 34 +++++++++++++++++++++---------- src/ui-goodies.lisp | 2 +- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/open-message-link-window.lisp b/src/open-message-link-window.lisp index 2741d7f..a4b4361 100644 --- a/src/open-message-link-window.lisp +++ b/src/open-message-link-window.lisp @@ -71,6 +71,7 @@ (if (string-starts-with-p gemini-constants:+gemini-scheme+ url) (let ((event (make-instance 'program-events:gemini-push-behind-downloading-event :priority program-events:+maximum-event-priority+))) + (gemini-viewer:ensure-just-one-stream-rendering) (program-events:push-event event) (gemini-viewer:request url :enqueue enqueue)) (os-utils:xdg-open url))) diff --git a/src/package.lisp b/src/package.lisp index b7e77ac..0e65b6a 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -1247,7 +1247,7 @@ :gemini-request-event :gemini-back-event :gemini-got-line-event - :gemini-abort-downloading-event + :gemini-abort-all-downloading-event :gemini-push-behind-downloading-event :gemini-abort-downloading-event :gemini-enqueue-download-event diff --git a/src/program-events.lisp b/src/program-events.lisp index 7c0f461..f04d10c 100644 --- a/src/program-events.lisp +++ b/src/program-events.lisp @@ -966,7 +966,12 @@ (append-text :initform t :initarg :append-text - :accessor append-text))) + :accessor append-text) + (skip-rendering + :initform nil + :initarg :skip-rendering + :reader skip-rendering-p + :writer (setf skip-rendering)))) (defmethod process-event ((object gemini-got-line-event)) (with-accessors ((response payload) @@ -976,12 +981,12 @@ (status-code-message gemini-client:status-code-message) (meta gemini-client:meta) (parsed-file gemini-client:parsed-file) - (url-header gemini-client:url-header) (source-url gemini-client:source-url) (source gemini-client:source) (links gemini-client:links) (text-rendering-theme gemini-client:text-rendering-theme)) response - (when (gemini-viewer:downloading-allowed-p wrapper-object) + (when (and (gemini-viewer:downloading-allowed-p wrapper-object) + (not (skip-rendering-p object))) (let* ((win specials:*message-window*) (rendered-line (gemini-parser:sexp->text parsed-file text-rendering-theme)) @@ -1002,6 +1007,18 @@ (defclass gemini-abort-downloading-event (program-event) ()) (defmethod process-event ((object gemini-abort-downloading-event)) + (with-accessors ((uri payload)) object + (when-let ((stream-object (gemini-viewer:find-db-stream-url uri))) + (gemini-viewer:abort-downloading stream-object) + (gemini-viewer:remove-db-stream stream-object) + (remove-event-if (lambda (a) + (and (typep a 'gemini-got-line-event) + (string= uri (gemini-viewer:download-uri stream-object))))) + (line-oriented-window:resync-rows-db specials:*gemini-streams-window*)))) + +(defclass gemini-abort-all-downloading-event (program-event) ()) + +(defmethod process-event ((object gemini-abort-all-downloading-event)) (gemini-viewer:remove-all-db-stream) (remove-event-if (lambda (a) (typep a 'gemini-got-line-event)))) @@ -1009,14 +1026,9 @@ (defmethod process-event ((object gemini-push-behind-downloading-event)) (map-events (lambda (a) - (setf (priority a) +minimum-event-priority+) - a))) - -(defclass gemini-abort-all-downloading-event (program-event) ()) - -(defmethod process-event ((object gemini-abort-all-downloading-event)) - (map-events (lambda (a) - (setf (priority a) +minimum-event-priority+) + (when (typep a 'gemini-got-line-event) + (setf (skip-rendering a) t) + (setf (priority a) +minimum-event-priority+)) a))) (defclass gemini-enqueue-download-event (program-event) ()) diff --git a/src/ui-goodies.lisp b/src/ui-goodies.lisp index 56a3123..f2102a0 100644 --- a/src/ui-goodies.lisp +++ b/src/ui-goodies.lisp @@ -60,7 +60,7 @@ (push-event delete-event) (clean-temporary-files))))) (let ((delete-count (db:count-status-marked-to-delete)) - (stop-download-event (make-instance 'gemini-abort-downloading-event + (stop-download-event (make-instance 'gemini-abort-all-downloading-event :priority +maximum-event-priority+))) (push-event stop-download-event) (if (> delete-count 0)