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:
parent
03d33bc719
commit
f09b0f4aa3
@ -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*)
|
||||||
|
@ -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+)
|
||||||
|
@ -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 ()
|
||||||
|
@ -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)
|
||||||
|
@ -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"
|
||||||
|
@ -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))
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user