1
0
Fork 0

- [GUI] added command to reload a gemini stream from the streams window.

This commit is contained in:
cage 2023-04-02 17:05:14 +02:00
parent d7f36cc33d
commit 41b2f7a571
6 changed files with 50 additions and 24 deletions

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -3,3 +3,9 @@
(define-constant +minimum-padding+ 2 :test #'=) (define-constant +minimum-padding+ 2 :test #'=)
(define-constant +ps-file-dialog-filter+ '(("PostScript Files" "*.ps")) :test #'equalp) (define-constant +ps-file-dialog-filter+ '(("PostScript Files" "*.ps")) :test #'equalp)
(define-constant +stream-status-streaming+ :streaming :test #'eq)
(define-constant +stream-status-canceled+ :canceled :test #'eq)
(define-constant +stream-status-downloading+ :downloading :test #'eq)

View File

@ -18,6 +18,8 @@
(a:define-constant +document-add+ "fmw_document-add" :test #'string=) (a:define-constant +document-add+ "fmw_document-add" :test #'string=)
(a:define-constant +document-accept+ "fmw_document-accept" :test #'string=)
(a:define-constant +folder+ "fmw_folder" :test #'string=) (a:define-constant +folder+ "fmw_folder" :test #'string=)
(defparameter *search* nil) (defparameter *search* nil)
@ -36,6 +38,8 @@
(defparameter *document-add* nil) (defparameter *document-add* nil)
(defparameter *document-accept* nil)
(defparameter *folder* nil) (defparameter *folder* nil)
(defun load-icon (filename) (defun load-icon (filename)
@ -56,4 +60,5 @@
(setf *up* (load-icon +up+)) (setf *up* (load-icon +up+))
(setf *document-delete* (load-icon +document-delete+)) (setf *document-delete* (load-icon +document-delete+))
(setf *document-add* (load-icon +document-add+)) (setf *document-add* (load-icon +document-add+))
(setf *document-accept* (load-icon +document-accept+))
(setf *folder* (load-icon +folder+))) (setf *folder* (load-icon +folder+)))

View File

@ -2,12 +2,6 @@
(named-readtables:in-readtable nodgui.syntax:nodgui-syntax) (named-readtables:in-readtable nodgui.syntax:nodgui-syntax)
(a:define-constant +stream-status-streaming+ :streaming :test #'eq)
(a:define-constant +stream-status-canceled+ :canceled :test #'eq)
(a:define-constant +stream-status-downloading+ :downloading :test #'eq)
(defclass gemini-stream () (defclass gemini-stream ()
((server-stream-handle ((server-stream-handle
:initform nil :initform nil
@ -77,8 +71,9 @@
(defmethod stop-stream-thread ((object gemini-stream)) (defmethod stop-stream-thread ((object gemini-stream))
(with-accessors ((fetching-thread fetching-thread)) object (with-accessors ((fetching-thread fetching-thread)) object
(abort-downloading object) (abort-downloading object)
(when (bt:threadp fetching-thread) (when (and (bt:threadp fetching-thread)
(bt:thread-alive-p fetching-thread))
(bt:join-thread fetching-thread))) (bt:join-thread fetching-thread)))
object) object)
@ -853,13 +848,14 @@
(setf (gui:text (gemtext-widget main-window)) text)) (setf (gui:text (gemtext-widget main-window)) text))
(defun init-main-window () (defun init-main-window ()
(gui:with-nodgui (:title +program-name+) (let ((gui:*debug-tk* nil))
(icons:load-icons) (gui:with-nodgui (:title +program-name+)
(initialize-menu gui:*tk*) (icons:load-icons)
(setf gui-goodies:*toplevel* gui:*tk*) (initialize-menu gui:*tk*)
(setf gui-goodies:*gui-server* gui:*wish*) (setf gui-goodies:*toplevel* gui:*tk*)
(client-events:start-events-loop) (setf gui-goodies:*gui-server* gui:*wish*)
(let ((main-frame (make-instance 'main-frame))) (client-events:start-events-loop)
(setf gui-goodies:*main-frame* main-frame) (let ((main-frame (make-instance 'main-frame)))
(gui:grid main-frame 0 0 :sticky :nswe) (setf gui-goodies:*main-frame* main-frame)
(gui-goodies:gui-resize-grid-all gui-goodies:*toplevel*)))) (gui:grid main-frame 0 0 :sticky :nswe)
(gui-goodies:gui-resize-grid-all gui-goodies:*toplevel*)))))

View File

@ -52,14 +52,23 @@
(stream-client-wrapper (client-main-window::find-db-stream-url url))) (stream-client-wrapper (client-main-window::find-db-stream-url url)))
(when (eq (client-main-window:status stream-client-wrapper) (when (eq (client-main-window:status stream-client-wrapper)
client-main-window:+stream-status-streaming+) client-main-window:+stream-status-streaming+)
(ev:with-enqueued-process-and-unblock () (ev:with-enqueued-process-and-unblock ()
(client-main-window:stop-steaming-stream-thread))) (client-main-window:stop-steaming-stream-thread)))
(ev:with-enqueued-process-and-unblock () (ev:with-enqueued-process-and-unblock ()
(client-main-window:remove-db-stream stream-client-wrapper) (client-main-window:remove-db-stream stream-client-wrapper)
(comm:make-request :gemini-remove-stream 1 url)) (comm:make-request :gemini-remove-stream 1 url))
(let ((new-rows (all-rows))) (let ((new-rows (all-rows)))
(resync-rows stream-frame new-rows))))))) (resync-rows stream-frame new-rows)))))))
(defun revive-stream-clsr (stream-frame)
(lambda ()
(a:when-let* ((selections (gui:treeview-get-selection (gui-goodies:tree stream-frame)))
(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)))))
(defun init-window (master) (defun init-window (master)
(gui:with-modal-toplevel (toplevel :master master :title (_ "Streams")) (gui:with-modal-toplevel (toplevel :master master :title (_ "Streams"))
(gui:transient toplevel master) (gui:transient toplevel master)
@ -68,8 +77,14 @@
(delete-button (make-instance 'gui:button (delete-button (make-instance 'gui:button
:master buttons-frame :master buttons-frame
:image icons:*document-delete* :image icons:*document-delete*
:command (delete-stream-clsr table)))) :command (delete-stream-clsr table)))
(gui-goodies:attach-tooltips (delete-button (_ "delete selected stream"))) (revive-button (make-instance 'gui:button
:master buttons-frame
:image icons:*document-accept*
:command (revive-stream-clsr table))))
(gui-goodies:attach-tooltips (delete-button (_ "delete selected stream"))
(delete-button (_ "show selected stream")))
(gui:grid table 0 0 :sticky :nwe) (gui:grid table 0 0 :sticky :nwe)
(gui:grid buttons-frame 1 0 :sticky :s) (gui:grid buttons-frame 1 0 :sticky :s)
(gui:grid delete-button 0 0 :sticky :s)))) (gui:grid delete-button 0 0 :sticky :s)
(gui:grid revive-button 0 1 :sticky :s))))

View File

@ -70,7 +70,10 @@
:+gemini-file-extension+ :+gemini-file-extension+
;; GUI ;; GUI
:+minimum-padding+ :+minimum-padding+
:+ps-file-dialog-filter+)) :+ps-file-dialog-filter+
:+stream-status-streaming+
:+stream-status-canceled+
:+stream-status-downloading+))
(defpackage :conditions (defpackage :conditions
(:use :cl (:use :cl
@ -3321,6 +3324,7 @@
:*up* :*up*
:*document-delete* :*document-delete*
:*document-add* :*document-add*
:*document-accept*
:*folder*)) :*folder*))
(defpackage :validation (defpackage :validation