mirror of
https://codeberg.org/cage/tinmop/
synced 2025-02-04 04:47:34 +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 "d" #'gemlog-cancel-subscription *gemlog-subscription-keymap*)
|
||||
|
||||
;; 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))
|
||||
|
||||
(defun gemini-cancel-subscription (gemlog-url)
|
||||
(query (delete-from +table-gemini-subscription+ (where (:= :url gemlog-url)))))
|
||||
|
||||
(defun find-gemlog-entry (post-url)
|
||||
(when-let* ((query (select :*
|
||||
(from +table-gemlog-entries+)
|
||||
|
@ -77,6 +77,7 @@
|
||||
(when suggested-message-index
|
||||
(select-row object suggested-message-index))
|
||||
(when redraw
|
||||
(win-clear object)
|
||||
(draw object))))))
|
||||
|
||||
(defun open-gemini-subscription-window ()
|
||||
|
@ -100,7 +100,7 @@ be subscribed before (see: 'gemini-subscription:subcribe'"
|
||||
(uri:port gemlog-iri)
|
||||
(uri:path gemlog-iri)))))
|
||||
(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))))
|
||||
(db:add-gemlog-entries (to-s gemlog-iri)
|
||||
(target link)
|
||||
|
@ -185,8 +185,11 @@
|
||||
(setf (selected (elt rows index)) t)))
|
||||
(ignore-selecting-action (e)
|
||||
(declare (ignore e))
|
||||
nil))
|
||||
object))
|
||||
nil)
|
||||
(set-default-index (e)
|
||||
(declare (ignore e))
|
||||
(setf row-selected-index 0)))
|
||||
object))
|
||||
|
||||
(defmethod selected-row ((object row-oriented-widget))
|
||||
"Return the current selected row"
|
||||
|
@ -957,6 +957,7 @@
|
||||
:row-seen-count
|
||||
:row-unseen-count
|
||||
:find-gemlog-entry
|
||||
:gemini-cancel-subscription
|
||||
:add-gemlog-entries
|
||||
:gemlog-mark-as-seen
|
||||
:gemlog-url
|
||||
@ -1348,6 +1349,7 @@
|
||||
:gemini-compact-lines-event
|
||||
:gemini-enqueue-download-event
|
||||
:gemini-gemlog-subscribe-event
|
||||
:gemlog-cancel-subscription-event
|
||||
:gemlog-show-event
|
||||
:get-chat-messages-event
|
||||
:get-chats-event
|
||||
@ -1780,6 +1782,7 @@
|
||||
:select-row
|
||||
:selected-row
|
||||
:ignore-selecting-action
|
||||
:set-default-index
|
||||
:selected-row-fields
|
||||
:selected-row-delete
|
||||
:search-row
|
||||
@ -2388,6 +2391,7 @@
|
||||
:gemlogs-subscription-go-down
|
||||
:close-gemlog-window
|
||||
:show-gemlog-to-screen
|
||||
:gemlog-cancel-subscription
|
||||
:send-to-pipe
|
||||
:send-message-to-pipe))
|
||||
|
||||
|
@ -1150,6 +1150,17 @@
|
||||
url)
|
||||
: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)
|
||||
((title
|
||||
|
@ -1243,17 +1243,30 @@ certificate).
|
||||
(defun close-gemlog-window ()
|
||||
(close-window-and-return-to-threads *gemini-subscription-window*))
|
||||
|
||||
(defun show-gemlog-to-screen ()
|
||||
(when-let* ((fields (line-oriented-window:selected-row-fields *gemini-subscription-window*))
|
||||
(gemlog-id (db:row-url fields))
|
||||
(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)))
|
||||
(defmacro with-selected-gemlog-id ((fields gemlog-id) &body body)
|
||||
`(when-let* ((,fields (line-oriented-window:selected-row-fields *gemini-subscription-window*))
|
||||
(,gemlog-id (db:row-url ,fields)))
|
||||
,@body))
|
||||
|
||||
(defun gemlog-cancel-subscription ()
|
||||
(with-selected-gemlog-id (fields gemlog-id)
|
||||
(when-let* ((entries (db:gemlog-entries gemlog-id))
|
||||
(event (make-instance 'program-events:gemlog-cancel-subscription-event
|
||||
:payload gemlog-id)))
|
||||
(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
|
||||
notify-starting-message
|
||||
|
Loading…
x
Reference in New Issue
Block a user