1
0
mirror of https://codeberg.org/cage/tinmop/ synced 2025-02-10 07:20:35 +01:00

- [gemini]

- prevent crash when subscribing to an already subscribed gemlog;
  - added cancel of subscriptions.
This commit is contained in:
cage 2021-01-10 11:35:28 +01:00
parent 03d33bc719
commit f09b0f4aa3
8 changed files with 51 additions and 14 deletions

View File

@ -371,6 +371,8 @@
(define-key "q" #'close-gemlog-window *gemlog-subscription-keymap*) (define-key "q" #'close-gemlog-window *gemlog-subscription-keymap*)
(define-key "d" #'gemlog-cancel-subscription *gemlog-subscription-keymap*)
;; tags keymap ;; tags keymap
(define-key "up" #'tag-go-up *tags-keymap*) (define-key "up" #'tag-go-up *tags-keymap*)

View File

@ -2905,6 +2905,9 @@ than `days-in-the-past' days (default: `(swconf:config-purge-cache-days-offset)'
(rows (fetch-all-rows query))) (rows (fetch-all-rows query)))
rows)) rows))
(defun gemini-cancel-subscription (gemlog-url)
(query (delete-from +table-gemini-subscription+ (where (:= :url gemlog-url)))))
(defun find-gemlog-entry (post-url) (defun find-gemlog-entry (post-url)
(when-let* ((query (select :* (when-let* ((query (select :*
(from +table-gemlog-entries+) (from +table-gemlog-entries+)

View File

@ -77,6 +77,7 @@
(when suggested-message-index (when suggested-message-index
(select-row object suggested-message-index)) (select-row object suggested-message-index))
(when redraw (when redraw
(win-clear object)
(draw object)))))) (draw object))))))
(defun open-gemini-subscription-window () (defun open-gemini-subscription-window ()

View File

@ -100,7 +100,7 @@ be subscribed before (see: 'gemini-subscription:subcribe'"
(uri:port gemlog-iri) (uri:port gemlog-iri)
(uri:path gemlog-iri))))) (uri:path gemlog-iri)))))
(loop for link in links do (loop for link in links do
(when (not (db:find-gemlog-entry (to-s gemlog-iri))) (when (not (db:find-gemlog-entry (to-s (target link))))
(let ((date (link-post-timestamp (name link)))) (let ((date (link-post-timestamp (name link))))
(db:add-gemlog-entries (to-s gemlog-iri) (db:add-gemlog-entries (to-s gemlog-iri)
(target link) (target link)

View File

@ -185,8 +185,11 @@
(setf (selected (elt rows index)) t))) (setf (selected (elt rows index)) t)))
(ignore-selecting-action (e) (ignore-selecting-action (e)
(declare (ignore e)) (declare (ignore e))
nil)) nil)
object)) (set-default-index (e)
(declare (ignore e))
(setf row-selected-index 0)))
object))
(defmethod selected-row ((object row-oriented-widget)) (defmethod selected-row ((object row-oriented-widget))
"Return the current selected row" "Return the current selected row"

View File

@ -957,6 +957,7 @@
:row-seen-count :row-seen-count
:row-unseen-count :row-unseen-count
:find-gemlog-entry :find-gemlog-entry
:gemini-cancel-subscription
:add-gemlog-entries :add-gemlog-entries
:gemlog-mark-as-seen :gemlog-mark-as-seen
:gemlog-url :gemlog-url
@ -1348,6 +1349,7 @@
:gemini-compact-lines-event :gemini-compact-lines-event
:gemini-enqueue-download-event :gemini-enqueue-download-event
:gemini-gemlog-subscribe-event :gemini-gemlog-subscribe-event
:gemlog-cancel-subscription-event
:gemlog-show-event :gemlog-show-event
:get-chat-messages-event :get-chat-messages-event
:get-chats-event :get-chats-event
@ -1780,6 +1782,7 @@
:select-row :select-row
:selected-row :selected-row
:ignore-selecting-action :ignore-selecting-action
:set-default-index
:selected-row-fields :selected-row-fields
:selected-row-delete :selected-row-delete
:search-row :search-row
@ -2388,6 +2391,7 @@
:gemlogs-subscription-go-down :gemlogs-subscription-go-down
:close-gemlog-window :close-gemlog-window
:show-gemlog-to-screen :show-gemlog-to-screen
:gemlog-cancel-subscription
:send-to-pipe :send-to-pipe
:send-message-to-pipe)) :send-message-to-pipe))

View File

@ -1150,6 +1150,17 @@
url) url)
:as-error t))))) :as-error t)))))
(defclass gemlog-cancel-subscription-event (program-event) ())
(defmethod process-event ((object gemlog-cancel-subscription-event))
(with-accessors ((gemlog-url payload)) object
(db:gemini-cancel-subscription gemlog-url)
(handler-bind ((conditions:out-of-bounds
(lambda (e)
(invoke-restart 'line-oriented-window:set-default-index e))))
(line-oriented-window:resync-rows-db specials:*gemini-subscription-window*
:suggested-message-index 0
:redraw t))))
(defclass gemlog-show-event (program-event) (defclass gemlog-show-event (program-event)
((title ((title

View File

@ -1243,17 +1243,30 @@ certificate).
(defun close-gemlog-window () (defun close-gemlog-window ()
(close-window-and-return-to-threads *gemini-subscription-window*)) (close-window-and-return-to-threads *gemini-subscription-window*))
(defun show-gemlog-to-screen () (defmacro with-selected-gemlog-id ((fields gemlog-id) &body body)
(when-let* ((fields (line-oriented-window:selected-row-fields *gemini-subscription-window*)) `(when-let* ((,fields (line-oriented-window:selected-row-fields *gemini-subscription-window*))
(gemlog-id (db:row-url fields)) (,gemlog-id (db:row-url ,fields)))
(entries (db:gemlog-entries gemlog-id)) ,@body))
(event (make-instance 'program-events:gemlog-show-event
:gemlog-url gemlog-id (defun gemlog-cancel-subscription ()
:title (db:row-title fields) (with-selected-gemlog-id (fields gemlog-id)
:subtitle (db:row-subtitle fields) (when-let* ((entries (db:gemlog-entries gemlog-id))
:entries entries))) (event (make-instance 'program-events:gemlog-cancel-subscription-event
(program-events:push-event event) :payload gemlog-id)))
(focus-to-message-window))) (with-blocking-notify-procedure ((format nil (_ "Canceling subscription for ~s") gemlog-id))
(program-events:push-event event)))))
(defun show-gemlog-to-screen ()
(with-selected-gemlog-id (fields gemlog-id)
(when-let* ((entries (db:gemlog-entries gemlog-id))
(event (make-instance 'program-events:gemlog-show-event
:gemlog-url gemlog-id
:title (db:row-title fields)
:subtitle (db:row-subtitle fields)
:entries entries)))
(program-events:push-event event)
(focus-to-message-window))))
(defun prompt-for-username (prompt complete-function event (defun prompt-for-username (prompt complete-function event
notify-starting-message notify-starting-message