1
0
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:
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 "d" #'gemlog-cancel-subscription *gemlog-subscription-keymap*)
;; 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))
(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+)

View File

@ -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 ()

View File

@ -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)

View File

@ -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"

View File

@ -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))

View File

@ -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

View File

@ -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