From 7543b840051751bd821a01be136911e65b2fa1f0 Mon Sep 17 00:00:00 2001 From: cage Date: Thu, 13 Apr 2023 17:54:54 +0200 Subject: [PATCH] - [GUI] added contextual menu command for opening link in background. --- src/gui/client/main-window.lisp | 47 +++++++++++++++++++------------ src/gui/client/stream-window.lisp | 4 +-- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/gui/client/main-window.lisp b/src/gui/client/main-window.lisp index d0f4914..88bb66e 100644 --- a/src/gui/client/main-window.lisp +++ b/src/gui/client/main-window.lisp @@ -277,12 +277,15 @@ (gen-ir-access pre-alt-text) -(defun link-click-mouse-1-callback-clsr (link-value main-window &key (use-cache t)) +(defun link-click-mouse-1-callback-clsr (link-value main-window + &key + (use-cache t) + (status +stream-status-streaming+)) (with-accessors ((tool-bar tool-bar)) main-window (with-accessors ((iri-entry iri-entry)) tool-bar (lambda () (setf (gui:text iri-entry) link-value) - (open-iri link-value main-window use-cache))))) + (open-iri link-value main-window use-cache :status status))))) (defun absolutize-link (request-iri link-value) (let ((parsed-request-iri (iri:iri-parse request-iri))) @@ -296,19 +299,24 @@ query)))) (defun contextual-menu-link-clrs (link-name link-value main-window) - (declare (ignore main-window)) - (lambda () - (let* ((popup-menu (gui:make-menu nil (_"link menu"))) - (add-to-tour-button (gui:make-menubutton popup-menu - (_ "Add link to tour") - (lambda () - (ev:with-enqueued-process-and-unblock () - (comm:make-request :tour-add-link - 1 - link-value - link-name)))))) - (declare (ignore add-to-tour-button)) - (gui:popup popup-menu (gui:screen-mouse-x) (gui:screen-mouse-y))))) + (flet ((download-background-callback () + (open-iri link-value main-window nil :status +stream-status-downloading+))) + (lambda () + (let* ((popup-menu (gui:make-menu nil (_"link menu"))) + (add-to-tour-button (gui:make-menubutton popup-menu + (_ "Add link to tour") + (lambda () + (ev:with-enqueued-process-and-unblock () + (comm:make-request :tour-add-link + 1 + link-value + link-name))))) + (background-open (gui:make-menubutton popup-menu + (_ "Open link in background") + #'download-background-callback))) + (declare (ignore add-to-tour-button + background-open)) + (gui:popup popup-menu (gui:screen-mouse-x) (gui:screen-mouse-y)))))) (defun collect-ir-lines (request-iri main-window lines) (with-accessors ((ir-lines ir-lines) @@ -529,12 +537,12 @@ (clean-gemtext main-window) (collect-ir-lines links-path-prefix gui-goodies:*main-frame* parsed-lines))) -(defun open-iri (iri main-window use-cache) +(defun open-iri (iri main-window use-cache &key (status +stream-status-streaming+)) (handler-case (let ((parsed-iri (iri:iri-parse iri))) (cond ((gemini-parser:gemini-iri-p iri) - (start-stream-iri iri main-window use-cache)) + (start-stream-iri iri main-window use-cache status)) ((or (null (uri:scheme parsed-iri)) (string= (uri:scheme parsed-iri) constants:+file-scheme+)) @@ -691,7 +699,10 @@ (slurp-non-text-data main-window iri)))) ((eq status +stream-status-downloading+) (when (not (find-db-stream-url iri)) - (enqueue-request-notify-error :gemini-request 1 iri use-cache))) + (let ((background-stream (make-instance 'gemini-stream + :server-stream-handle iri + :status status))) + (push-db-stream background-stream)))) (t (error "Unrecognized stream status for address ~s: ~s" iri status)))))))) diff --git a/src/gui/client/stream-window.lisp b/src/gui/client/stream-window.lisp index c7fe9a0..ef8abcd 100644 --- a/src/gui/client/stream-window.lisp +++ b/src/gui/client/stream-window.lisp @@ -66,8 +66,8 @@ (selection (first selections))) (let* ((url (gui:id selection)) (new-rows (all-rows))) - (resync-rows stream-frame new-rows) - (client-main-window::open-iri url gui-goodies:*main-frame* t))))) + (client-main-window::open-iri url gui-goodies:*main-frame* t) + (resync-rows stream-frame new-rows))))) (defun init-window (master) (gui:with-toplevel (toplevel :master master :title (_ "Streams"))